Problema no cálculo e na lógica?

Aumente a quantidade de números que terão os fatoriais impressos, até 20, 30, 40. Em um determinado momento, além desse cálculo demorar, vai começar a mostrar respostas completamente erradas. Porque? Mude de int para long, e você poderá ver alguma mudança

Resolve a questão, mas dar problema no calculo (na lógica), estou usando o long mas mesmo assim, vou colocar meu código ai embaixo quem puder me ajudar, a partir do 20 da outra resposta totalmente diferente.

import javax.swing.JOptionPane;
public class fatorial2 {

public static void main (String  args [] ){
	
	
	for (long n=1, fatorial = 1; n <=40; n++ ){
		
		fatorial = (fatorial * n);
		
		JOptionPane.showMessageDialog(null, n+ "!=" + fatorial);
	}	
}}
1 curtida

O maior valor positivo que o tipo long suporta é 9223372036854775807.
O fatorial de 20 é 2432902008176640000, então ele cabe perfeitamente em um long.
O fatorial de 21 é 51090942171709440000, ou seja é um valor que não é comportado por um long.

2 curtidas

Gustavo, a saída é usar o BigInteger.

Dê uma olhada nesse tópico aqui http://www.guj.com.br/t/resolvido-fatoriais-de-1-a-40/75796, que tem o código da solução.

Abraço!

1 curtida

blz, vou olhar lá, obrigado ((=

obrigado ((=