c ++中的大数字库

Ron*_*nis 22 c++ biginteger

我正在做一个需要非常大的数字,最多100位的项目.我已经读过java支持大整数(java.Math.BigInteger),我想知道C++中是否有类似的东西.所以,这是我的问题:是否存在实现大整数的标准或非标准c ++库?

注意:如果没有大整数的标准实现,我想要一个简单的非标准.提前致谢.

sae*_*edn 28

GNU多精度算术库做你想要的http://gmplib.org/

Gnu MP是一个C库,但它有一个C++类接口,如果你只对大整数感兴趣,你可能只是处理mpz_class.请查看我从C++ Interface General页面下面的示例

 int main (void)
 {
   mpz_class a, b, c;

   a = 1234;
   b = "-5678";
   c = a+b;
   cout << "sum is " << c << "\n";
   cout << "absolute value is " << abs(c) << "\n";

   return 0;
 }
Run Code Online (Sandbox Code Playgroud)

  • 不高兴.不足以downvote,但(1)问题是标记C++.GMP是C.(2)一个好的C++接口将易于使用; 例如,加法只是'+'.(3)问题是大整数.GMP是各种各样的bignums. (5认同)
  • @RondogiannisAristophanes bignum实现并不简单 (4认同)
  • @DavidHammen也许我应该解决GMP的一个特定部分,而不是整个库.关于(1)和(2),GMP v5有一个C++类接口http://gmplib.org/manual/C_002b_002b-Class-Interface.html,它也重载了一些运算符. (4认同)
  • 我想要一个简单的实现 (2认同)

小智 10

不幸的是,大数字没有标准库.你说你正在寻找一个"简单"的库,我所知道的最简单的库是InfInt.它只包含一个头文件.它的用法相当简单.这是一个示例代码:

InfInt myint1 = "15432154865413186646848435184100510168404641560358";
InfInt myint2 = 156341300544608LL;

myint1 *= --myint2 - 3;
std::cout << myint1 << std::endl;
Run Code Online (Sandbox Code Playgroud)

  • @ElefEnt:我尝试了两种方法,GMP在我的情况下要快几个数量级.(特定任务需要63分钟而40秒.)但是,我使用了GMP高度优化的[MPIR](https://github.com/wbhart/mpir)端口. (3认同)
  • InfInt 非常慢!GMP 速度慢了几个数量级! (2认同)
  • 你为什么从这个/sf/answers/1176133731/重新发布? (2认同)

joh*_*ohn 6

你说你想要一个简单的界面/实现,这里有一个http://www.di-mgt.com.au/bigdigits.html.我个人仍然会去GMP.