大數乘法(C )

2022-04-17 14:09:43 字數 1233 閱讀 6370

首先說一下乘法計算的演算法:同樣是模擬人工計算時的方法。

從低位向高位乘,在豎式計算中,我們是將乘數第一位與被乘數的每一位相乘,記錄結果之後,用第二位相乘,記錄結果並且左移一位,以此類推,直到計算完最後一位,再將各項結果相加,得出最後結果。

計算的過程基本上和小學生列豎式做乘法相同。為程式設計方便,並不急於處理進製,而將進製問題留待最後統一處理。

我們以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 #include4

using

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 高精度乘法,重點!...