在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可用)
更多的是,有没有办法做到这一点并不是非常慢?
答案 0 :(得分:0)
您可以使用bigint library,或者如果您真的有野心,可以创建一个动态数组来存储整数。
答案 1 :(得分:0)
有很快的方法可以做到这一点(比CPU寄存器中的数学还要慢),请注意。这方面的库已经存在,但是如果你对实现细节感兴趣,我建议检查GMP的源代码(http://gmplib.org/),以及阅读(以及在中进行练习) Knuth的计算机程序设计的艺术,第2卷:研究数学算法。
答案 2 :(得分:0)
“更多的是,有没有办法做到这一点并不是非常慢?”
与固定长度16,32,64相比,在某些机器中,128位,所有都非常慢,因为数学必须以小步骤完成。加法和减法也不算太差,阵列中每个单元只有一个或两个时钟周期(32或64位,具体取决于架构),但乘法和除法确实非常慢。随着数字变得非常大(超过几千位左右),您还会遇到缓存未命中的问题,这会减慢计算速度。
但是你可以比在ascii字符串中存储数字好一点。