Hola.
Gracias a Avesudra, ayer pude configurar la librería GMP en Codeblocks. Llevo toda la mañana intentando calcular la suma de todos los dígitos del resultado de hacer 2
1000. Lo que hago es esto:
#include <stdio.h>
#include <gmp.h>
unsigned long int suma=0, i=0;
//Lo pongo como variable global porque si lo meto en main() me dice "Suma dígitos.exe dejó de funcionar. Windows está buscando una solución"
int main()
{
mpz_t num, resultado, mod; //Variables
mpz_set_ui(num, 2); //Inicializo num a 2
mpz_init(resultado); //resultado = 0
mpz_init(mod); //mod=0
mpz_pow_ui(resultado, num, 1000); // 2^1000
gmp_printf("Resultado: %Zd\n\n", resultado); //Imprimo 2^1000, y el resultado es correcto
while(mpz_cmp_ui(resultado, 0) > 0)
{//BUCLE INFINITO
suma += mpz_mod_ui(mod, resultado, 10); //suma = suma + el resto de dividir resultado entre 10
mpz_set_ui(resultado, mpz_cdiv_ui(resultado, 10)); //Dividimos resultado entre 10
printf("%d\n", suma
); //Además de que el bucle es infinito, he comprobado que la suma la hace mal.
}
mpz_clear(resultado); //Liberamos memoria
mpz_clear(num);
mpz_clear(mod);
return 0;
}
2
1000 lo hace bien, pero se queda en el while(), no sé por qué...
Mi idea era inicializar suma a 0, hallar el resto de dividir 2
1000 entre 10, y sumárselo, y así hasta que "resultado = 0", puesto que si llega a 0 significa que ya hemos sumado todas sus cifras.
¿Alguien tiene una idea de qué hago mal?
Muchas gracias.
Saludos.