[SOLUCIONADO] Almacenar e imprimir números enteros muy grandes.

Iniciado por thug, Febrero 20, 2014, 09:17:50 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Febrero 20, 2014, 09:17:50 PM Ultima modificación: Agosto 17, 2014, 12:09:38 PM por Expermicid
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:
Código: c


#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!

Solo cambia esta linea dentro del main

Código: php
printf("El factorial de %d es: %lu\n", numero, funcion(factorial, contador, numero));

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


Cambia %lu por %lld
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
In my mind where before there was order, today there is only chaØs!

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!

te sirve una libreria externa? No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
si usas linux la puedes bajar con apt-get install libcln-dev
y luego sería algo asi como
Código: cpp

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


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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta