terça-feira, 14 de agosto de 2012

Exemplo simples usando BigInteger

Você já teve alguma vez um problema de matemática que precisava de calcular um valor muito grande e não conseguiu porque o computador não tinha um número de precisão suficientemente grande?

Em muito casos a classe BigInteger pode ser uma boa solução. Vamos ver o caso do fatorial por exemplo. Tente fazer o fatorial de 20 ou 21 em uma calculadora, no excel ou outro programa. Você vai receber uma mensagem de erro ou um valor convertido para real. Por exemplo a calculadora do meu linux retorna

Vamos tentar no java com BigInteger:

Bacana!!! Quer ver o código que gerou isto? Continue lendo...

import java.math.BigInteger;

public class CalculaFatorial {

  // funcao que calcula o fatoria de um numero n
  // n tem que ser maior do que ou igual a 0
  public static BigInteger fatorial( BigInteger n ) {
    if (n.compareTo( BigInteger.ONE ) <= 0 ) {
      return BigInteger.ONE;
    } else {
      return n.multiply( fatorial( n.subtract(BigInteger.ONE) ) ); 

      // n = n * f(n-1) --> recursao
    }
  }


  // recebe como parâmetros o numero que iremos calcular o fatorial
  public static void main( String[] args ) {
    if (args.length < 1) {
      System.out.println("Uso: java CalculaFatorial n");
      System.exit(0); // sair
    } else {
      BigInteger n = new BigInteger( args[0] );
    
      System.out.printf(" Fatorial de %d = %d\n", n, fatorial(n) );
    }

  }

}