4

执行以下操作的最佳方法是什么。

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

先感谢您。

编辑:它是一个 500,000 位的正整数。

4

14 回答 14

13

PythonJava具有原生支持,存在C++C.NET等库。

于 2009-10-31T01:51:04.237 回答
11

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

于 2009-10-31T01:49:04.693 回答
6

Python 开箱即用,没有特殊的库。Unix 系统的“bc”(一种伪装成计算器的完整编程语言)也是如此。

于 2009-10-31T01:53:32.053 回答
6

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!-)在我爱好之一(组合算术)中,我确实必须经常处理这样的数字;-)。

于 2009-10-31T03:38:05.533 回答
4

Mathematica 允许您进行此类数学运算,并且您可以在其中编写完整的程序。

否则,您寻求的是一个“库”来扩展另一种编程语言(例如 Python 或 Java)的内置功能。

对于 Python,decimal 模块使您能够指定执行数学运算的精度。

于 2009-10-31T01:47:12.543 回答
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+ 个字符。我认为这种方式演示起来更简单一些。

于 2009-10-31T01:51:49.353 回答
4

Common Lisp 也内置了对任意大数的支持......

于 2009-10-31T02:32:30.253 回答
3

Perl 有一个bignum模块来做这种事情,而 Python 本身就支持它。

于 2009-10-31T01:48:58.703 回答
3

Perl、Python、Ruby 和 Java 都可以做到这一点。其他一切都存在外部库。

我更喜欢 Ruby 和 Python,因为它们会自动FixnumBignum. (Python:intlong。)

于 2009-10-31T01:51:52.830 回答
3

您正在寻找的不一定是一种语言,而是一个任意精度的库。

GMP 将是 C/C++ 中的快速实现,处理大整数的脚本语言可能会使用类似的东西。

于 2009-10-31T02:18:10.273 回答
1

MIT/GNU Scheme has support for arbitrarily large numbers.

于 2009-10-31T02:39:49.837 回答
1

许多函数式语言本身就支持任意精度的数字。这里已经提到了一些,但为了完整起见,我将重复它们:

于 2009-10-31T03:47:17.300 回答
1

在 C 或 C++ 中,您可以使用GMP(Gnu 多精度库)

在 Perl 中,您可以使用bignum 模块

于 2009-10-31T01:52:36.060 回答
0

我发现 Python 非常适合这一点。

于 2009-10-31T14:40:13.290 回答