elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Factoriales con while en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Factoriales con while en C  (Leído 3,461 veces)
PHByte

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Factoriales con while en C
« en: 27 Octubre 2015, 20:53 pm »

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 línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Factoriales con while en C
« Respuesta #1 en: 27 Octubre 2015, 21:01 pm »

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.


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Factoriales con while en C
« Respuesta #2 en: 27 Octubre 2015, 21:04 pm »

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

Código
  1. unsigned long int x,y=0,z=1;
« Última modificación: 27 Octubre 2015, 21:08 pm por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
PHByte

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Factoriales con while en C
« Respuesta #3 en: 27 Octubre 2015, 21:12 pm »

Muchas gracias a los dos! Ya he aprendido algo mas :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
numeros primos y factoriales en java
Java
leliCabello 7 15,479 Último mensaje 5 Noviembre 2009, 22:33 pm
por leliCabello
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines