21

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

174^55 = 1.6990597648061509725749329578093e+123 

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

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

3 回答 3

31

C 中的普通类型通常最多只能存储 64 位,因此您必须在数组中存储大数字,并自己编写数学运算。但是您不应该在这里重新发明轮子——您可以为此尝试使用GNU 多精度算术库。

正如评论已经指出的那样,该^操作是二进制 XOR。对于求幂,您将不得不使用数学函数,例如pow.

于 2010-04-14T20:06:45.723 回答
5

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

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

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

于 2010-04-14T20:08:54.563 回答
3

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

于 2010-04-14T20:09:42.723 回答