Pessoal preciso de ajuda para descobrir o motivo do erro em um dos exercícios da apostila caelum fj 11 pag 26. Nesse exercício devo imprimir os fatoriais de 1 a 40. Fiz da seguinte forma:
public class ImprimeFatoriasDe1a40 {
public static void main(String[] args) {
for (long n = 1, fatorial = 1; n <= 40; n++) {
fatorial = fatorial * n;
System.out.println("O fatorial de " + n + "! é igual a " + fatorial);
}
}
}
Depois do fatorial 20 o código mostra resultados errados, por exemplo, o fatorial de 40! = -70609262346240000. Qual foi o erro?
[quote=Onimatsu]Pessoal preciso de ajuda para descobrir o motivo do erro em um dos exercícios da apostila caelum fj 11 pag 26. Nesse exercício devo imprimir os fatoriais de 1 a 40. Fiz da seguinte forma:
public class ImprimeFatoriasDe1a40 {
public static void main(String[] args) {
for (long n = 1, fatorial = 1; n <= 40; n++) {
fatorial = fatorial * n;
System.out.println("O fatorial de " + n + "! é igual a " + fatorial);
}
}
}
Depois do fatorial 20 o código mostra resultados errados, por exemplo, o fatorial de 40! = -70609262346240000. Qual foi o erro?
[/quote]
oi,
isso acontece porque estoura a capacidade do integer que é de
ou seja
Então o que eu posso usar no lugar do long, existe uma função para tratar desse caso?
oi,
utilize o BigInteger
BigInteger n = BigInteger.ONE;
for (int i = 1; i <= 20; i++) {
n = n.multiply(BigInteger.valueOf(i));
System.out.println(i + "! = " + n);
}
[quote]oi,
utilize o BigInteger
BigInteger n = BigInteger.ONE;
for (int i = 1; i <= 20; i++) {
n = n.multiply(BigInteger.valueOf(i));
System.out.println(i + "! = " + n);
}
[/quote]
O fatorial de 40! é igual a 815915283247897734345611269596115894272000000000
BigInteger fatorial = BigInteger.ONE;
for (long n = 1; n <= 40; n++) {
fatorial = fatorial.multiply(BigInteger.valueOf(n));
System.out.println("O fatorial de " + n + "! é igual a " + fatorial);
}
Agora sim ficou certo. Valeu mesmo pela ajuda tava precisando.
Abs!
[quote=Onimatsu][quote]oi,
utilize o BigInteger
BigInteger n = BigInteger.ONE;
for (int i = 1; i <= 20; i++) {
n = n.multiply(BigInteger.valueOf(i));
System.out.println(i + "! = " + n);
}
[/quote]
O fatorial de 40! é igual a 815915283247897734345611269596115894272000000000
BigInteger fatorial = BigInteger.ONE;
for (long n = 1; n <= 40; n++) {
fatorial = fatorial.multiply(BigInteger.valueOf(n));
System.out.println("O fatorial de " + n + "! é igual a " + fatorial);
}
Agora sim ficou certo. Valeu mesmo pela ajuda tava precisando.
Abs![/quote]
Peguei esse bonde “dúvida” aí e agradeço, pois também me ajudou muito!
BigInteger é o cara, rsrs!