大數運算 4 大數乘法

2021-07-22 02:17:34 字數 958 閱讀 6388

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

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

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

我們以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];

另外進製時要處理,當前的值加上進製的值再看本位數字是否又有進製;前導清零。

下面是c語言**實現:

#include#include#define max 100

char a[max],b[max];//用字串進行數字的輸入

int x[max+10],y[max+10],z[max*2+10];//積的位數最多是因數字數的兩倍

int main()

} for(i=max*2;i>0;i--) //刪除0的字首

for(;i>=0;i--) //倒序輸出

printf("%d",z[i]);

printf("\n");

} return 0;

}

大數運算 4 大數乘法

摘自 首先說一下乘法計算的演算法 同樣是模擬人工計算時的方法。從低位向高位乘,在豎式計算中,我們是將乘數第一位與被乘數的每一位相乘,記錄結果之後,用第二位相乘,記錄結果並且左移一位,以此類推,直到計算完最後一位,再將各項結果相加,得出最後結果。計算的過程基本上和小學生列豎式做乘法相同。為程式設計方便...

6 大數乘法

對於32位字長的機器,大約超過20億,用int型別就無法表示了,我們可以選擇int64型別,但無論怎樣擴充套件,固定的整數型別總是有表達的極限!如果對超級大整數進行精確運算呢?乙個簡單的辦法是 僅僅使用現有型別,但是把大整數的運算化解為若干小整數的運算,即所謂 分塊法 如圖 1.jpg 表示了分塊乘...

1027 大數乘法

1027 大數乘法 題目位址 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出2個大整數a,b,計算a b的結果。input 第1行 大數a 第2行 大數b a,b的長度 1000,a,b 0 output 輸出a binput示例 123456 234567 out...