Java em Fatorial

Amigos eu não sei onde estou errando, sei q é na lógica, mas como estou aprendendo e revendo gostaria da ajuda de vcs.

Preciso calcular um fatorial de 1 até 200 e mostrar na tela o resultado, mas ainda não estou conseguindo finalizar o calculo.

Alguém pode me ajudar a identificar o erro??

Agradeço.

[code]
public class CalculoFatorial
{
public CalculoFatorial()
{

}

public static void main(String arg[])
{
	long numero = 2, fatorial = 1;
	long cont;
	
	while(numero < 200)
	{
		for (cont = 1; cont < 200; cont++  )
		{
			fatorial = fatorial * (cont);
		}
		System.out.println("Fatorial de " + numero + " é " + fatorial);
		numero ++;
		fatorial = 1;
	}
}

}[/code]

Apesar de este ser seu trabalho de algum curso, hoje estou caridoso, tente:

contador = 1 valor=1 enquanto(numeroFat>contador) valor=numeroFat*contador contador++

Aí usa esta função num loop.

O seu erro é que tanto int quanto long não são suficientes para conter o fatorial do número 200, que é 7,8865786736479050355236321393219 x 10 elevado a 374. Infelizmente, o maior valor de um double está por volta de 10 elevado a 308, então também não dá para usar um double.

Você tem de fazer as contas com BigInteger.

fatorial da um número muito grande… 200 iterações resula em um número que “long” não é capaz de suportar… vc precisa usar BigInteger para o trabalho

alem disso, fatorial vc pode fazer em um FOR, ou de forma recursiva…

a forma recursiva, lembra apenas o seguinte… N! é igual a N vezes (N-1)! … sendo assim, podemos dizer que
fatorial(N) = N * fatorial(N-1) … so é preciso lembrar que… fatorial(0) não é igual a 0 * fatorial(-1) e sim a 1

isso vc pode afirmar que

public long fatorial(long N) { if (N ==0) return 1; else return N * fatorial(N-1); }

o único problema dessa abordagem é que long não suporta números grandes… portanto vc precisa fazer em BigInteger

public BigInteger calculateFatorial(BigInteger n) { return (n.equals(BigInteger.ZERO)) ? BigInteger.ONE : n.multiply(calculateFatorial(n.subtract(BigInteger.ONE))); }

Ps.: thingol respondeu antes deu =[ … hehehe… so pra constar o número que sai é esse

“788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638”
“830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277”
“524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000”
“000000000000000000000000”

separei em 4 linhas para caber na tela =x

[edit] Duas respostas antes da minha… a do lavieri é bem melhor eu acho. Não conhecia BigInteger. :P[/edit]

O fatorial de um número n é dado pelo produto de n e todos os números inteiros menores que ele. Ou seja, o fatorial de 200:

200 * 199 * 198 … * 1 * 0!

Sendo que 0! = 1.

Então você não precisa destes dois loopings que vc criou, basta um que percorra de 200 até 1 ou o inverso (nesse caso não faz diferença):

O problema maior provavelmente deve ser porque o fatorial de 200 (que é um número gigantesco) não cabe em um simples int e nem mesmo em um long. A solução é utilizar BigDecimal. Como eu nunca usei deve existir maneira melhores desta que eu sugeri logo abaixo (principalmente no método pra multiplicar):

int n = 200;
BigDecimal fatorial = new BigDecimal(1);

for ( int i = n; i > 0; --i ) {
   fatorial = fatorial.multiply(new BigDecimal(i));
}

System.out.println(fatorial);

Abraço.

Amigos eu agradeço a ajuda e realmente ajudou muito, como o Samuel afirmou, esse é um exercício de estudo!

Eu fiquei na seguinte dúvida, porque o calculo do fatorial pode ser feito de várias maneiras: Caso eu queira imprimir na tela os registros de números fatoriais de 1 até 2.000.000, como posso fazer em Java? Não quero nada mastigado e sim aprender e conto com a ajuda de vcs.

Sendo assim, ai está!

Fatorial é o seguinte: 5! é 5 . 4 . 3 . 2 . 1 = 120

Esssa seria uma forma para achar o Fatorial: Fat -> n! = n . (n - 1)!

no portugol ficaria mais ou menos assim:


para(i de 1 até 2000000) faca
leia fat, i;
fat <- fat . (fat-1);

       escreva: "O fatorial de 1 até 2000000 é: ", fat

fimpara


Agradeço desde já!!