你如何对无限数位的数字进行计算?

时间:2013-06-28 21:55:47

标签: c++ c biginteger

在C中,您可以执行简单的操作:

int a = b + c;

现在,如果a大于2 ^ 32(或者可能是2 ^ 31 + 1),您可以将代码更改为:

long a = b + c;

unsigned long a = b + c;

但是你如何实现像:

这样的补充
bigint a = b + c;

其中bigint是某种类/ typedef /结构,用于存储和计算大整数(数字长度为数百位)。如果您只是尝试使用小学的标准手写十进制方法将数字加在一起,则可以在等式中进行无限长的数字。但是到了计算机科学,如何使用二进制,高效的方法,你可以进行无限长的计算(如果有足够的RAM可用)

更多的是,有没有办法做到这一点并不是非常慢?

3 个答案:

答案 0 :(得分:0)

您可以使用bigint library,或者如果您真的有野心,可以创建一个动态数组来存储整数。

答案 1 :(得分:0)

有很快的方法可以做到这一点(比CPU寄存器中的数学还要慢),请注意。这方面的库已经存在,但是如果你对实现细节感兴趣,我建议检查GMP的源代码(http://gmplib.org/),以及阅读(以及中进行练习) Knuth的计算机程序设计的艺术,第2卷:研究数学算法

答案 2 :(得分:0)

“更多的是,有没有办法做到这一点并不是非常慢?”

与固定长度16,32,64相比,在某些机器中,128位,所有都非常慢,因为数学必须以小步骤完成。加法和减法也不算太差,阵列中每个单元只有一个或两个时钟周期(32或64位,具体取决于架构),但乘法和除法确实非常慢。随着数字变得非常大(超过几千位左右),您还会遇到缓存未命中的问题,这会减慢计算速度。

但是你可以比在ascii字符串中存储数字好一点。