我正在C++中构建一个用于我的编程语言的小型BigInt库。C++ BigInt乘法概念问题
的结构是这样的:
short digits[ 1000 ];
int len;
我有一个通过拆分其分成单个字符并将其付诸digits
一个字符串转换为BIGINT的功能。
中位数的数字都是颠倒的,所以数字123看起来像下面这样:
digits[0]=3 digits[1]=3 digits[2]=1
我已经成功地编写了加入功能,它完美的作品。
它的工作原理有点像这样:
overflow = 0
for i ++ until length of both numbers exceeded:
add numberA[ i ] to numberB[ i ]
add overflow to the result
set overflow to 0
if the result is bigger than 10:
substract 10 from the result
overflow = 1
put the result into numberReturn[ i ]
(溢出是在这种情况下,当我添加1〜9个究竟:10。减去10,加1到溢出,溢出被添加到下一个数字)
所以认为的两个数是如何存储的,像那些:
0 | 1 | 2
---------
A 2 - -
B 0 0 1
上面表示bigints 2(A)和100(B)的digits
。 -
表示未初始化的数字,它们不被访问。
因此将上述号码正常工作:从0开始,加2 + 0,到1,加0,进入2,加1
但是:
当我想做乘法与上述的结构,我的计划最后也做了以下内容:
从0开始,乘2 0(伊克),去1,...
所以很明显,对于乘法,我必须得到这样的订单:
0 | 1 | 2
---------
A - - 2
B 0 0 1
然后,一切都将是明确的:从0开始,0乘以0,到1,0乘以0,进入2,乘以1与2
- 哪有我设法让
digits
进入乘法的正确形式? - 我不想做任何阵列移动/翻转 - 我需要性能!
你所谓的“溢出”是大多数人称之为“携带”的东西。 – 2010-04-22 12:50:16