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!