大整數相乘

2021-08-22 03:27:02 字數 1346 閱讀 7156

有兩個用字串表示的非常大的大整數,算出他們的乘積,也是用字串表示。不能用系統自帶的大整數型別。

輸入描述:

空格分隔的兩個字串,代表輸入的兩個大整數
輸出描述:

輸入的乘積,用字串表示
示例1

72106547548473106236 982161082972751393
70820244829634538040848656466105986748
在下面的例子程式中,用unsigned an1[200]和unsigned an2[200]分別存放兩個乘數,用aresult[400]來存放積。計算的中間結果也都存在aresult中。aresult長度取400是因為兩個200位的數相乘,積最多會有400位。an1[0], an2[0], aresult[0]都表示個位。

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

現以 835×49為例來說明程式的計算過程。

先算835×9。5×9得到45個1,3×9得到27個10,8×9得到72個100。由於不急於處理進製,所以835×9算完後,aresult如下:

接下來算4×5。此處4×5的結果代表20個10,因此要 aresult[1]+=20,變為:

再下來算4×3。此處4×3的結果代表12個100,因此要 aresult[2]+= 12,變為:

最後算 4×8。此處4×8的結果代表 32個1000,因此要 aresult[3]+= 32,變為:

乘法過程完畢。接下來從 aresult[0]開始向高位逐位處理進製問題。aresult[0]留下5,把4加到aresult[1]上,aresult[1]變為51後,應留下1,把5加到aresult[2]上……最終使得aresult裡的每個元素都是1位數,結果就算出來了:

總結乙個規律,即乙個數的第i位和另乙個數的第j位相乘所得的數,一定是要累加到結果的第i+j位上。這裡i, j都是從右往左,從0開始數。

大整數相乘

一 乘數和被乘數為long型別的 public class bignumberchenglong int pi1 new int getlength p1 int pi2 new int getlength p2 將乘數和被乘數存入陣列中 long temp p1 int num 0 int i 0...

大整數相乘

這是一道經典的上機題目 include include include define n 100 n代表乘數的位數,根據具體應用,想設多大設多大。function 大整數相乘演算法 引數 a 乘數 b 乘數 n a的長度 m b的長度 沒有返回值,結果直接放到全域性變數res陣列中,如果不想要全域性...

大整數相乘

處理大整數相乘的辦法很多,我這裡貼一種最簡單實現,通過字元陣列去接收和輸入大整數。題目要求如下 如下 2015.9.15 華為.cpp 定義控制台應用程式的入口點。include stdafx.h include include define maxlength 1024 define m 100 ...