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

TESTE CALCULADORA FATORIAL

Pessoal,

Com base na aula de hoje, montei outro código para calcular o fatorial de qualquer número (valor de n), porém está com erro. Aparentemente, o cálculo só funciona para números abaixo de 13. Poderiam me ajudar a descobrir o que tem de errado no código para que funcione com qualquer número?

Segue: public class CalculadoraFatorial { public static void main(String[] args) { int n = 4; for (int i = n-1; i > 1; i = i-1) { int fatorial = n*i; n = fatorial; } System.out.println("Fatorial = " + n); } }

Obrigada!

3 respostas
solução!

Olá, Nathalie!

Creio que este erro está acontecendo porque você acaba excedendo o valor que uma variável do tipo int consegue armazenar, quando calcula o fatorial de números maiores que 13.

Segundo este artigo (https://www.ibm.com/docs/en/i/7.2?topic=programs-cobol-java-data-types), uma variável do tipo int consegue armazenar valores entre -2147483648 e 2147483647.

Para contornar este problema, você poderia usar variáveis do tipo long, que suportam valores entre -9223372036854775808 e 9223372036854775807. Todavia, em algum momento você também estouraria este limite e acabaria voltando ao mesmo erro.

Uma solução definitiva seria utilizar a classe BigInteger, que suporta valores extremamente altos.

Não vou entrar em muitos detalhes, para não acabar te confundindo, mas a lógica é a mesma do seu código, mudando apenas o tipo da variável fatorial e fazendo as conversões necessárias.

O código ficaria assim:

import java.math.*;

public class Main
{
    public static void main(String[] args) {

        int n = 90;

        BigInteger fatorial = BigInteger.valueOf(n);

        for (int i = n-1; i > 1; i = i-1) { 
            fatorial = fatorial.multiply(BigInteger.valueOf(i)); 
        } 

        System.out.println("Fatorial = " + fatorial);
    }
}

Vou deixar alguns links como referência, para que você possa ler mais sobre o assunto:

https://www.geeksforgeeks.org/biginteger-class-in-java/ https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html

Não se preocupe se não entender tudo, continue seus estudos que mais adiante você conseguirá entender melhor.

Espero ter ajudado!

Obrigada pela explicação, Mateus! Foi muito esclarecedora.

Olá, Nathália!

Marque a resposta como solução do tópico.

Boa sorte em seus estudos!