在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是用于存储和计算大整数(数百位数长度的数字)的某种类/类型定义/结构。如果你只是想用标准的手写小数方法将数字相加,你可以在等式中做无限长的数字。但是回到计算机科学,如何使用二进制、高效的方法来进行无限长的计算(假设有足够的RAM可用)
更重要的是,有没有一种不会太慢的方法呢?
发布于 2013-06-29 05:59:05
你可以使用一个大整数library,或者如果你真的觉得有野心,你可以创建一个动态数组来存储你的整数。
发布于 2013-06-29 05:59:53
有一些非常快速的方法可以做到这一点(注意,在CPU寄存器中仍然比数学慢得多)。这方面的库已经存在,但如果您对实现细节感兴趣,我建议您查看GMP (http://gmplib.org/)的源代码,以及阅读(正在做中的练习)Knuth的计算机编程艺术,第2卷:半数字算法。
发布于 2013-06-29 06:03:22
“更重要的是,有没有一种不会太慢的方法呢?”
与固定长度的16、32、64和某些机器中的128位相比,这一切都会相当慢,因为数学运算必须以很小的步长来完成。加法和减法并不是很糟糕,阵列中每个单元只有一个或两个时钟周期(32或64位取决于体系结构),但乘法和除法确实变得相当慢。当数字变得非常大(超过几千位左右)时,您还会遇到缓存未命中的问题,这会减慢计算速度。
但是你当然可以得到比在ascii字符串中存储数字更好的方法。
https://stackoverflow.com/questions/17374275
复制相似问题