Problema no cálculo e na lógica?

4 respostas
programaçãojava
G

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);
	}	
}}

4 Respostas

S

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.

J

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!

G

blz, vou olhar lá, obrigado ((=

G

obrigado ((=

Criado 3 de fevereiro de 2017
Ultima resposta 7 de fev. de 2017
Respostas 4
Participantes 3