在 C 中存储和处理大数
Posted
技术标签:
【中文标题】在 C 中存储和处理大数【英文标题】:Store and work with Big numbers in C 【发布时间】:2011-02-08 02:19:55 【问题描述】:我需要帮助处理非常大的数字。根据 Windows calc,指数
174^55 = 1.6990597648061509725749329578093e+123
如何使用 C(c99 标准)存储它?
int main()
long long int x = 174^55; //result is 153
printf("%lld\n", x);
【问题讨论】:
在 C 中,^
是二进制 XOR,而不是指数。为此,您需要使用 pow()
函数。
^
运算符在 C 中表示 XOR,而不是求幂。
你在做异或,你需要 pow
How do you store an arbitrarily large integer value in memory?
【参考方案1】:
C 中的普通类型通常最多只能存储 64 位,因此您必须在数组中存储大数字,并自己编写数学运算。但是您不应该在这里重新发明*** - 您可以为此尝试 GNU Multiple Precision Arithmetic Library。
正如 cmets 已经指出的,^
操作是二进制 XOR。对于求幂,您将不得不使用像 pow
这样的数学函数。
【讨论】:
【参考方案2】:如果近似值没问题,您可以使用浮点数(float
或 double
)。正如评论者所说,你需要pow
,而不是^
。
但是,对于密码学,近似值不起作用。您需要支持非常大整数的算术运算。 GMP 提供通用的多精度算术支持。许多加密包的代码中也会有这样的算法,通过第三方库或内置; PuTTY 有一个用于大整数的 bignum 库,OpenSSL 可能也有类似的东西。
基本的 C 数据类型是不够的。
【讨论】:
【参考方案3】:您可以将其存储在整数数组中。一个 64 位整数只是 2 个 32 位整数。一个 1024 位整数也可以看作是 32 个 32 位整数。
【讨论】:
以上是关于在 C 中存储和处理大数的主要内容,如果未能解决你的问题,请参考以下文章