Buenas!
Tengo un ejercicio que me pide calcular el factorial de numeros naturales utilizando WHILE, bueno, he podido hacer algo (imagino que de casualidad) solo calcula los factoriales hasta el numero 12, a partir de ahi no da nada bien. Que deberia hacer??
Código:
Citar#include<stdio.h>
main(){
int x,y=0,z=1;
printf("Dame un n\xA3mero: ");
scanf("%i",&x);
if(x==0){
printf("\n%i! = 1",x);
}
else{
if(x==1){
printf("\n%i! = 1",x);
}
else{
printf("\n%i! = ",x);
while(y<x){
y++;
z=z*y;
if(x==y){
printf("%i = ",x);
}
else{
printf("%i x ",y);
}
}
printf(" %i",z);
printf("\n");
}
}
}
En vez de int, utiliza long long.
No me fijé en tu algoritmo, pero los factoriales tiran números muy altos.
No esperes sacar el factorial de 25 con un código básico, sin el uso de clases o algoritmos avanzados.
Revisa que funcione con los números del 0 al 12. Si es correcto, puedes darte por satisfecho con tu resultado.
acabas de tocar un limite computacional de C, int es un tipo de variable normalmente 32bits, que puede contener valores desde -2.147.483.647 hasta 2.147.483.647... sin embargo el resultado del factorial de 13 es 6.227.020.800, para poder mostrarlo, tendrías que usar en lugar de int, long int que es de 64bits, si quieres duplicar el rango (para que no tome en cuenta los negativos) usarías unsigned long int y toma en cuenta que no llegarás muy lejos porque el valor máximo sería 18.446.744.073.709.551.616, que aunque parezca muy grande es menor que el factorial de 21 (que es 51.090.942.171.709.440.000)... si quieres calcular más allá de eso tendrás que usar métodos especiales (aritmética de precisión arbitraria)
entonces en la linea que declaras x,y, z, debería ser
unsigned long int x,y=0,z=1;
Muchas gracias a los dos! Ya he aprendido algo mas :D