在 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】:

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

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于在 C 中存储和处理大数的主要内容,如果未能解决你的问题,请参考以下文章

数学问题——大数处理

处理大数输入的模板

解构流存储 — Pravega,与 Flink 构建端到端的大数据流水处理线

c语言中怎么处理一个特别大的数据的运算

Java基础学习之大数字处理相关的类有哪些?

大数加减法 - java实现