2010-04-14 10 views
14

Necesito ayuda para trabajar con números muy grandes. Según Windows calc, el exponenteAlmacene y trabaje con números grandes en C

174^55 = 1.6990597648061509725749329578093e+123 

¿Cómo puedo almacenar esto usando C (estándar c99)?

int main(){ 
    long long int x = 174^55; //result is 153 
    printf("%lld\n", x); 
} 
+7

En C, '^' es XOR binario, no exponencial. Necesitas usar la función 'pow()' para eso. –

+1

El operador '^' significa XOR, no exponenciación, en C. – pyon

+0

Está haciendo un XOR, necesita pow – Skynight

Respuesta

25

tipos normales en C pueden por lo general sólo almacenar hasta 64 bits, por lo que tendrá que almacenar grandes números en una matriz, por ejemplo, y escribir operaciones matemáticas usted mismo. Pero no debe reinventar la rueda aquí; puede probar el GNU Multiple Precision Arithmetic Library para este fin.

Y como ya se señaló en los comentarios, la operación ^ es XOR binaria. Para la exponenciación, tendrá que usar funciones matemáticas como pow.

5

Si la aproximación es correcta, puede usar números de coma flotante (float o double). Y necesita pow, no ^, como dicen los comentaristas.

Sin embargo, para la criptografía, la aproximación no funciona. Necesita soporte para aritmética con enteros muy grandes. GMP proporciona soporte aritmético general de precisión múltiple. Muchos paquetes criptográficos también tendrán tales algoritmos en su código, ya sea a través de una biblioteca de terceros o incorporada; PuTTY tiene una biblioteca bignum para enteros grandes, y OpenSSL probablemente tiene algo similar.

Los tipos de datos de C básicos no son suficientes.

2

Puede almacenarlo en una matriz de números enteros. Un entero de 64 bits es solo 2 enteros de 32 bits. Un entero de 1024 bits también podría verse como 32 enteros de 32 bits.

Cuestiones relacionadas