Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Estou com dúvida no curso de Primeiros passos com Java, no exercício 7 do capítulo Variáveis e fluxo.

O instrutor disse:

Isso acontece porque, a partir de 16!, o valor supera o limite superior do tipo int. O tipo long consegue armazenar o cálculo dos fatoriais até 34!.

Porém está errado. A long só suporta até a 20;

Façam o teste com 21 em diante e vejam:

class fatoriaisUmDez {
    public static void main (String[] args) {
        long fat = 1;
        for (int q = 1; q <= 21; q++) {
        fat = fat * q;
        System.out.println("fat(" + q + ") = " + fat);
      }
   }    
}

Se observaram, a partir de 21 a long abre. Eu gostaria de saber qual das primitivas devo usar, pois a long e a int não funcionam à partir do fatorial de 21.

Muito Obrigado!

7 respostas
solução!

Usa a classe BigInteger para inteiros e a classe BigDecimal para números de ponto flutuante.

olá,

Nesse caso o BigInteger seria usado para a variável fat, q ou ambas?

A principio fat, mas tudo depende que qual o valor vc vai usar pra q, mas um inteiro deve ser o bastante pra armazenar o numero de interacoes que vc quer.

obrigada

deveria ter uma maneira para ele ja simular o valor em fatorial, de que se quero uma fatorial com um i de no maximo 30 elementos, ele automaticamente consideraria o BigInteger na variavel do fatorial. deu para entender?

Deu pra enteder, Java e um lingugem tipada, ou seja tipo sao importantes, talves que se vc usar a api de reflection talvez consiga esse comportamento que quer, mas estaria fazendo uma ganbirra que no meu ponto de vista so eh justificada por uma regra de negocio muito importante.

Nossa! Esse código foi bem inteligente!