执行以下操作的最佳方法是什么。
输入一个很长的数字,假设 500,000 位长而不用科学记数法;然后可以用它做数学,比如+2等?
先感谢您。
编辑:它是一个 500,000 位的正整数。
执行以下操作的最佳方法是什么。
输入一个很长的数字,假设 500,000 位长而不用科学记数法;然后可以用它做数学,比如+2等?
先感谢您。
编辑:它是一个 500,000 位的正整数。
我知道 Erlang 支持无限大小的 int 算术。
Python 开箱即用,没有特殊的库。Unix 系统的“bc”(一种伪装成计算器的完整编程语言)也是如此。
Python 本身就相当不错,但更好的是gmpy
(它将它连接到其他人提到的 GMP 库,或者与 MPIR 有点类似工作的库 [[work in progress;-)]])。考虑:
$ python -mtimeit -s'x=int("1"*9999); y=int("2"*9999)' 'x*y'
100 loops, best of 3: 6.46 msec per loop
即,在纯 Python 中,将两个 10K 位整数相乘需要 6.5 毫秒左右。和...:
$ python -mtimeit -s'from gmpy import mpz; x=mpz("1"*9999); y=mpz("2"*9999)' 'x*y'
1000 loops, best of 3: 326 usec per loop
...有了 gmpy,操作将快 20 倍左右。如果你有数百而不是数千位数,那就更极端了:
$ python -mtimeit -s'x=int("1"*199999); y=int("2"*199999)' 'x*y'
10 loops, best of 3: 675 msec per loop
对比
$ python -mtimeit -s'from gmpy import mpz; x=mpz("1"*199999); y=mpz("2"*199999)' 'x*y'
100 loops, best of 3: 17.8 msec per loop
所以,用 200k 位而不是 10k 位,gmpy 的速度优势是 38 倍左右。
如果您经常需要处理这种数量级的整数,Python + gmpy 确实是一个可行的解决方案(当然我有偏见,因为我在过去几年中确实编写和关心 gmpy 正是因为我♥ Python(嘿,我的许可证盘子是 P♥thon!-)在我的爱好之一(组合算术)中,我确实必须经常处理这样的数字;-)。
Mathematica 允许您进行此类数学运算,并且您可以在其中编写完整的程序。
否则,您寻求的是一个“库”来扩展另一种编程语言(例如 Python 或 Java)的内置功能。
对于 Python,decimal 模块使您能够指定执行数学运算的精度。
Haskell(使用 GHC 时)还内置了对任意长整数的支持。这是一个片段,显示了转换为字符串的数字的长度。
Prelude> length $ show $ 10
2
Prelude> length $ show $ 1 + 2^2000000
602060
Prelude> let x = 2^200000
Prelude> let y = 2^200000 + 5
Prelude> y - x
5
或者您可以2^200000
在交互式控制台上键入并等待几分钟,让它打印出所有 600k+ 个字符。我认为这种方式演示起来更简单一些。
Common Lisp 也内置了对任意大数的支持......
Perl 有一个bignum
模块来做这种事情,而 Python 本身就支持它。
我更喜欢 Ruby 和 Python,因为它们会自动Fixnum
从Bignum
. (Python:int
到long
。)
您正在寻找的不一定是一种语言,而是一个任意精度的库。
GMP 将是 C/C++ 中的快速实现,处理大整数的脚本语言可能会使用类似的东西。
MIT/GNU Scheme has support for arbitrarily large numbers.
在 C 或 C++ 中,您可以使用GMP(Gnu 多精度库)。
在 Perl 中,您可以使用bignum 模块。
我发现 Python 非常适合这一点。