Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: thug en Febrero 20, 2014, 09:17:50 PM

Título: [SOLUCIONADO] Almacenar e imprimir números enteros muy grandes.
Publicado por: thug en Febrero 20, 2014, 09:17:50 PM
Hola. Estoy haciendo un programa que calcule el factorial. Y uno de los requisitos del programa es que calcule factoriales de hasta un mínimo de 32 dígitos significativos. Aunque no he podido conseguir que imprima mas de 19 dígitos. Por lo que solo puedo calcular hasta el factorial de 20 correctamente. Este es el código:


#include <stdio.h>

int numero;            //variable que almacena el numero del que se obtendra el factorial.
int contador = 1;         //variable que almacena el numero de iteraciones
long factorial = 1;      //variable que almacena el factorial.
long funcion(long, int, int);  //prototipo de la funcion.


int main(){
   printf("Numero: ");
   scanf("%d", &numero);
   printf("El factorial de %d es: %lu\n", numero, funcion(factorial, contador, numero));
   return 0;
}

//funcion que calcula factorial donde...
//   x es el factorial
//   y es el contador
//   z es el numero introducido por el usuario.
long funcion(long x, int y, int z){
   while(y <= z){
      x = x * y;
      y = y + 1;     
   }
   return x;
}



Me preguntaba si existe la forma de que imprima los 32 dígitos,  ya intenté algunas cosas como utilizar unsigned long en la variable factorial y en la función que lo calcula. Pero al parecer no cambia nada. Utilizo linux y el compilador gcc.

Saludos!
Título: Re:Almacenar e imprimir números enteros muy grandes.
Publicado por: S t Ø r M d ∆ r k en Febrero 20, 2014, 10:56:15 PM
Solo cambia esta linea dentro del main

printf("El factorial de %d es: %lu\n", numero, funcion(factorial, contador, numero));
a
printf("El factorial de %d es: %lld\n", numero, funcion(factorial, contador, numero));

Cambia %lu por %lld
Título: Re:Almacenar e imprimir números enteros muy grandes.
Publicado por: thug en Febrero 20, 2014, 11:20:33 PM
Gracias por tu respuesta StOrMd[4]rk, lo de %lld también ya lo había puesto y el programa al parecer sigue sin funcionar correctamente. ¿conoces algún otro?

Saludos!
Título: Re:Almacenar e imprimir números enteros muy grandes.
Publicado por: deni_celine en Febrero 21, 2014, 12:57:05 AM
te sirve una libreria externa? http://www.warrenweckesser.net/software/cln/
si usas linux la puedes bajar con apt-get install libcln-dev
y luego sería algo asi como
Código (cpp) [Seleccionar]

cl_I funcion(long f, int y, int z){
   cl_I x = f;
   while(y <= z){
      x = x * y;
      y = y + 1;
   }
   return x;
}

Título: Re:Almacenar e imprimir números enteros muy grandes.
Publicado por: OnTheCore en Mayo 10, 2014, 01:56:35 PM
El límite de  los numeros enteros es unsigned long long int. Para ver el máximo valor que podes usar, podes hacer algo asi:
printf("%llu\n", -1);

Si queres usar números mas grandes que eso te recomiendo leer el código de esta librería https://gmplib.org/