执行以下操作的最佳方法是什么。
输入一个很长的数字,可以说500,000位数字而不用科学记数法;然后我可以用它做数学,比如+2等?
提前谢谢。
编辑:这是一个500,000位正整数。
答案 0 :(得分:12)
答案 1 :(得分:10)
我知道Erlang支持无限大小的算术。
答案 2 :(得分:6)
Python开箱即用,没有特殊的库。对于Unix系统来说,'bc'(这是一种伪装成计算器的完整编程语言)也是如此。
答案 3 :(得分:5)
Python本身相当不错,但更好的是gmpy
(它将其连接到其他人提到的GMP库,或者替代MPIR有点像工作[[正在进行的工作;-) ]])。考虑:
$ 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
VS
$ 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! - )和在我的一个爱好(组合算术)我做必须处理这些数字经常; - )。
答案 4 :(得分:4)
Mathematica允许您进行此类数学运算,您可以在其中编写完整的程序。
否则,您所寻求的是扩展其他编程语言(如Python或Java)的内置功能的“库”。
对于Python,decimal module使您能够指定将执行数学运算的精度。
答案 5 :(得分:4)
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 +字符。我认为这种方式更容易证明。
答案 6 :(得分:4)
Common Lisp也内置了对任意大数字的支持......
答案 7 :(得分:3)
Perl有一个bignum
模块来做这种事情,Python本身就支持它。
答案 8 :(得分:3)
我更喜欢Ruby和Python,因为它们会自动从Fixnum
切换到Bignum
。 (Python:int
到long
。)
答案 9 :(得分:3)
您正在寻找的不一定是语言,而是一个任意精度的库。
GMP将是C / C ++中的快速实现,处理大整数的脚本语言可能会使用类似的东西。
答案 10 :(得分:1)
在C或C ++中,您可以使用GMP (Gnu Multi-Precision library)。
在Perl中,您可以使用bignum module。
答案 11 :(得分:1)
麻省理工学院/ GNU计划支持任意大数字。
答案 12 :(得分:1)
许多函数式语言本身都支持任意精度数。这里已经提到了一些,但我会重复它们的完整性:
答案 13 :(得分:0)
我发现Python非常适合这个。