我正在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