首先說一下乘法計算的演算法:同樣是模擬人工計算時的方法。
從低位向高位乘,在豎式計算中,我們是將乘數第一位與被乘數的每一位相乘,記錄結果之後,用第二位相乘,記錄結果並且左移一位,以此類推,直到計算完最後一位,再將各項結果相加,得出最後結果。
計算的過程基本上和小學生列豎式做乘法相同。為程式設計方便,並不急於處理進製,而將進製問題留待最後統一處理。
我們以125*53為例來說明計算過程:
1、先算125*3,3*5得到15個1,3*2得到6個10,3*1得到3個100;
2、接下來算125*5,5*5得到25個10,2*5得到10個100,5*1得到5個1000;
3、乘法過程完畢。接下來從 a[0]開始向高位逐位處理進製問題。a[0]留下5,把1 加到a[1]上,a[1]變為32 後,應留下2,把3 加到a[2]上……最終使得a裡的每個元素都是1 位數,結果就算出來了
結果就是6625。
總結乙個規律:即乙個數的第i 位和另乙個數的第j 位相乘所得的數,一定是要累加到結果的第i+j 位上。這裡i, j 都是從右往左,從0 開始數。
即:ans[i+j] = a[i]*b[j];
另外進製時要處理,當前的值加上進製的值再看本位數字是否又有進製;前導清零。
1 #include2 #include3 #include4using
namespace
std;56
7#define max 100
8int
len1,len2,i,j;
9string
s;10
string
a,b;
11int x[max+10],y[max+10],z[max*2+10];//
積的位數最多是因數字數的兩倍
1213
string multiply(string a,string
b)14
26for(i=0;i2;i++)//
進行進製
2733}34
for(i=max*2;i>0;i--) //
刪除0的字首
3541
for(;i>=0;i--) //
倒序輸出
42 s+=z[i]+'0'
;43return
s;44}45
46int
main()
4755
return0;
56 }
C 大數乘法
大資料乘法,兩個或者以上的大的資料相乘。例如 輸入 987654321 123456789 輸出 121932631112635269 大資料乘法主要用到的原理就是小時候學的豎式乘法。實現 的關鍵點有兩個 1 for int i 0 i lena i 這裡假設a i b j 是輸入的兩個數,lena...
C 大數乘法
高精度乘法運算題 目描述 給定兩個位數不 超過100 位的正整數 求它們的乘積。輸入描述 輸入檔案中包含 多個測試數 據。每個測試數 據佔兩行,分別為乙個正整 數,每個正整數的位 數不超過100 位。輸入 資料一直到檔案尾 輸 出描述 對輸入文 件中的每個測 試資料,輸出 其中兩個正整 數的乘積。樣...
c 高精度乘法(大數乘法)
對於計算機無法用普通資料型別 如 longint 表示的大整數進行乘法運算,稱為高精度乘法。高精度乘法主要包括以下幾個要求及過程 1 為了獲取輸入數字的每一位的值,包括個位,十位等,輸入整型的資料是無法滿足的,因此,輸入資料必須為字串形式。2 字串轉整型,儲存每一位值於陣列中 3 高精度乘法,重點!...