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

Variáveis com suporte a grandes números

Gostaria de saber qual tipo de variável, se possível, armazenar grandes números como o fatorial de 100. O desafio é "printar" os fatoriais de 1 a 10, consegui. Mas antes de revisar o código, eu tinha colocado até 100. As saídas até o 20 deu certo, mas ficou alternando entre grandes negativos e positivos a partir do 21 e, após o 66, deu 0 até o 100.

public class DesafioFatorial{

public static void main(String[] args) {

System.out.println("O fatorial de 0 eh 1");

for(int fatorial = 1; fatorial <= 100; fatorial++){

long acumuladora = 1l;

for(int contador = 1;contador<=fatorial ;contador++ ){

acumuladora = acumuladora*contador;

} System.out.println("O fatorial de "+fatorial+" eh "+acumuladora); } } }

2 respostas

Use o tipo double

public class DesafioFatorial{

    public static void main(String[] args) {

        System.out.println("O fatorial de 0 eh 1");

        for(int fatorial = 1; fatorial <= 100; fatorial++){

            double acumuladora = 1l;

            for(int contador = 1;contador<=fatorial ;contador++ ){

                acumuladora = acumuladora*contador;

            } 

            System.out.println("O fatorial de "+fatorial+" eh "+acumuladora); 
        } 

    } 

}
solução!

Boa tarde, Natan! Como vai?

Nesses casos, o melhor a ser feito é utilizar o BigInteger assim:

import java.math.BigInteger;

public class FatorialBigInteger {
    public static void main(String[] args) throws Exception {

        System.out.println("O fatorial de 0 eh 1");

        for(int fatorial = 1; fatorial <= 100; fatorial++){

            BigInteger acumuladora = BigInteger.valueOf(1);

            for(int contador = 1;contador<=fatorial ;contador++ ){

                acumuladora = acumuladora.multiply(BigInteger.valueOf(contador));

            } 

            System.out.println("O fatorial de "+fatorial+" eh "+acumuladora); 
        }
    }

}

EXTRA: Se vc der uma olhada nessa classe BigInteger vai ver que ela tem vários métodos úteis para diversos tipos de cálculos!

Qualquer coisa é só falar!

Grande abraço e bons estudos!