【问题标题】:How to get arbitrarily large numbers in c++? [duplicate]如何在 C++ 中获得任意大的数字? [复制]
【发布时间】:2017-02-19 01:20:50
【问题描述】:

我需要一种方法来使用非常大的数据类型。虽然 int 通常是 4 字节,但我需要 536、870、912 字节甚至更高的数据类型。我不能只使用数组,因为我需要能够使用它们转换为字符串、加法、减法、乘法、除法等。

如何创建或使用如此大的数据类型?我需要一个 uint4294967296_t :P

注意,我尝试过使用带有位域的结构,但它们不够大,我无法使用它在值之间进行转换。

【问题讨论】:

  • 使用library,也许?
  • Greg 指的是 GIMP 库,通常为此推荐。
  • 投票结束,因为图书馆的推荐目前不在 SO 上。
  • 您有多种选择,包括 GMP:gmplib.org,或者创建自己的类。这个问题已经在 SO 上被问过好几次了,包括herehere
  • 如果你想自己执行多精度数学,那么我建议你看看 Donald Knuth 的Art of Computer Programming。我相信第 II 卷,半数值算法,第 4 章,多精度算术,是您感兴趣的内容。另请参阅 How to add 2 arbitrarily sized integers in C++?,它提供了一些 C++ 库和 OpenSSL 的代码。

标签: c++ data-structures arbitrary-precision


【解决方案1】:

使用 Bignumber 库,我更喜欢 TTMath 的简单性。你可以在这里找到它Link to tttmath。 TTTmath 允许对大数进行操作,但您可能需要创建自己的 toString 方法。

这是他们Samples页面上使用的TTTmath示例:

#include <ttmath/ttmath.h>
#include <iostream>

int main()
{
ttmath::UInt<2> a,b,c;

    a = "1234";
    b = 3456; 
    c = a*b;

    std::cout << c << std::endl;
}
Listing nr 1

【讨论】:

  • 图书馆的推荐应该是评论,而不是答案。将其标记为这样。 (这意味着,希望模组能将其转换为评论。)
  • 为什么?他没有问如何实现大数字,而是如何使用它们。所以图书馆推荐应该是一个有效的答案。
  • 请求图书馆推荐的问题与 SO 无关(这是股票收盘原因之一)。
  • 如果图书馆是解决手头问题的唯一明智方法,我似乎有点挑剔。他实际上并没有要求图书馆推荐,而是描述了他的问题,这符合stackoverflow.com/help/on-topic
  • @zett42:我同意这对 SO 上的这类问题很有用,但这是当前的规则。我认为因为总是可以添加新的不同答案,任意长的推荐序列。例如。 C++ book list FAQ,一个非常有用的问题,遇到了这个问题,被转换成不太有用的格式。
猜你喜欢
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 2021-08-18
相关资源
最近更新 更多