Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DickGumshoe en 4 Julio 2012, 19:10 pm



Título: Problema con números largos
Publicado por: DickGumshoe en 4 Julio 2012, 19:10 pm
Hola.

Estoy haciendo problemas en los que algunas variables guardan números muy grandes. Por ejemplo, quiero calcular la suma de los dígitos del resultado de hacer 2 ^1000

La función de sumar los dígitos he comprobado que está bien, y la función pow() sé usarla, por lo que he supuesto a que el resultado es incorrecto debido a que trabajo con números muy grandes:

Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int suma(long long int n)
  5. {
  6.    if(n >= 0 && n < 10) return n;
  7.    else return n%10 + suma(n/10);
  8. }
  9.  
  10. int main()
  11. {
  12.    long long int num;
  13.    int resultado;
  14.  
  15.    num = pow(2, 1000);
  16.  
  17.    resultado = suma(num);
  18.    printf("Resultado: %d", resultado);
  19.    return 0;
  20. }
  21.  
  22.  

¿Qué puedo hacer? He visto que a veces recomiendan usar librerías externas, pero prefiero que me lo confirme alguien...

Saludos y muchas gracias.


Título: Re: Problema con números largos
Publicado por: SXF en 4 Julio 2012, 19:56 pm
Si me parace que la unica forma es utilizar una libreria extena como CLN.
Mira este enlace:
http://clan-destino42.blogspot.com.es/2011/01/numeros-grandes-en-c.html

Si te fijas en la documentacion te indica que  usando esta función:

cl_RA expt (const cl_RA& x, const cl_I& y)
cl_R expt (const cl_R& x, const cl_I& y)
cl_N expt (const cl_N& x, const cl_I& y)
Returns x^y.

puedes intentar obtener lo que quieres.
Puedes verlo aquí: http://www.ginac.de/CLN/cln_4.html#SEC22


Título: Re: Problema con números largos
Publicado por: DickGumshoe en 4 Julio 2012, 20:03 pm
Muchas gracias.

Esa librería utiliza clase, según el link que me has pasado, por lo creo que es de C++... ¿O se puede usar bien en C?

Saludos.


Título: Re: Problema con números largos
Publicado por: SXF en 4 Julio 2012, 20:14 pm
Si me parece que es pa c++ ya que usa clases. Y los prerequisitos parece indicar eso:
http://www.ginac.de/CLN/cln_2.html#SEC3
Aunque he encontrado otra que si creo que trabaja en c y c++.
http://gmplib.org


Título: Re: Problema con números largos
Publicado por: DickGumshoe en 4 Julio 2012, 21:56 pm
Muchas gracias, creo que esa va a ser la librería que me va a servir.

En el PDF que viene ahí, pone cómo instalar la librería en UNIX... Pero, ¿cómo se instala en Windows 7 en CodeBlocks? Solo he instalado por ahora la librería Allegro, y no sé muy bien todavía cómo hacerlo...

Saludos.


Título: Re: Problema con números largos
Publicado por: avesudra en 5 Julio 2012, 02:59 am
Toma aquí viene , en ingles pero bueno... http://www.cs.nyu.edu/exact/core/gmp/



Título: Re: Problema con números largos
Publicado por: DickGumshoe en 5 Julio 2012, 12:28 pm
Muchas gracias, avesudra.