什么编程语言可以让我输入一个很长的数字而不将其转换为浮点数?

ron*_*on8 4 math programming-languages digits

如何做到以下几点是最好的方法.

输入一个很长的数字,可以说是500,000位数,而不是科学记数法; 然后我能用它做数学,比如+2等?

先感谢您.

编辑:这是一个500,000位正整数.

aru*_*rul 12

PythonJava有本机支持,库存在C++,C,.NET,...

  • 我不会将Java的BigInteger类描述为"Native Support". (2认同)

jld*_*ont 10

我知道Erlang支持无限大小的算术.

  • +1 Erlang非常受欢迎.它是免费的......与Mathematica不同. (2认同)

Omn*_*ous 6

Python开箱即用,没有特殊的库.对于Unix系统来说,'bc'(这是一种伪装成计算器的完整编程语言)也是如此.


Ale*_*lli 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
Run Code Online (Sandbox Code Playgroud)

即,在纯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
Run Code Online (Sandbox Code Playgroud)

......随着手头的gmpy,操作将快20倍左右.如果你有数百个而不是数千个数字,那就更极端了:

$ python -mtimeit -s'x=int("1"*199999); y=int("2"*199999)' 'x*y'
10 loops, best of 3: 675 msec per loop
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

因此,拥有20万个数字而不仅仅是10k,gmpy的速度优势是38倍左右.

如果你经常需要处理这么大的整数,那么Python + gmpy实际上是一个可行的解决方案(当然我有偏见,因为我在过去几年里做过和关心gmpy正是因为我♥Python(嘿,我的执照)板为P♥马拉松- - !) ,并在我的爱好(组合运算)之一,我有相当经常处理这样的数字;-).