在C中存储和使用大数字

时间:2010-04-14 20:03:52

标签: c exponentiation

我需要帮助处理非常大的数字。根据Windows calc,指数

174^55 = 1.6990597648061509725749329578093e+123 

如何使用C(c99标准)存储?

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

3 个答案:

答案 0 :(得分:25)

C中的普通类型通常最多只能存储64位,因此您必须在数组中存储大数字,并自行编写数学运算。但你不应该在这里重新发明轮子 - 你可以为此目的尝试GNU Multiple Precision Arithmetic Library

正如评论已经指出的那样,^操作是二进制异或。对于取幂,你必须使用像pow这样的数学函数。

答案 1 :(得分:5)

如果近似值正常,则可以使用浮点数(floatdouble)。您需要pow,而不是^,因为评论者说。

但是,对于加密,近似不起作用。你需要支持非常大的整数运算。 GMP提供通用的多精度算术支持。许多加密软件包在其代码中也会有这样的算法,可以通过第三方库或内置; PuTTY有一个用于大整数的bignum库,OpenSSL可能有类似的东西。

基本的C数据类型还不够。

答案 2 :(得分:2)

您可以将其存储在整数数组中。 64位整数只是2个32位整数。 1024位整数也可以看作32个32位整数。