[C]Factorial de un numero

Iniciado por HRSLASH, 9 Agosto 2010, 17:11 PM

0 Miembros y 2 Visitantes están viendo este tema.

HRSLASH

Hola foreros!! :D aca dejo un programita que calcula el factorial de un numero. El problema que tiene es que cuando se ingresa un numero mayor a 12 da un resultado erroneo, declare la variable factorial con todos los tipos pero en ningun caso funciono.. como se podria solucionar??


#include<stdio.h>

main()
{
      int i, num;
      double factorial = 1;
     
      printf("FACTORIAL DE UN NUMERO\n\n");
      printf("Ingrese un numero: ");
      scanf("%d", &num);
     
      for (i = 1; i <= num; i++)
          factorial *= i;
     
      printf("\n%d! = %.0f\n", num, factorial);

      return 0;
}


P.D: Acabo de modificar el codigo, ahora si factorea cualquier nº. Grax rob1104!
La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer

rob1104

Hola, probaste con unsigned long long?? Acepta el rango: 0 a 18,446,744,073,709,551,615.
Para imprimirlo con printf el modificador es %lld
#include<stdio.h>

int main()
{
     int i, num;
     unsigned long long factorial = 1;

     printf("FACTORIAL DE UN NUMERO\n\n");
     printf("Ingrese un numero: ");
     scanf("%d", &num);

     for (i = 1; i <= num; i++)
         factorial *= i;

     printf("\n%d! = %lld\n", num, factorial);

     return 0;
}


Saludos
Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.

HRSLASH

Hola rob! gracias x tu ayuda! lo acabo de probar asi pero tampoco da el rtdo correcto..  :-\ t hago una preg, pq lo declaras unsigned?
La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer

rob1104

Era solo para mas rango positivo pero veo que no es suficiente.

Intenta declarando la variable factorial tipo double, y en el printf prueba con el modificador %.0f, si no quieres ver tantos 0s puedes usar el %e para notacion cientifica.

Saludos
Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.

HRSLASH

Lo modifique a double y efectivamente funciono!  :D ahora si el programa factoriza cualquier numero.. Muchas gracias x la ayuda!!  :D

Saludos!!
La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer

leogtz

Cita de: rob1104 en  9 Agosto 2010, 17:28 PM
Para imprimirlo con printf el modificador es %lld


Sería %llu, no %lld.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com