大整數乘法

2021-05-12 15:36:48 字數 1283 閱讀 5119

參考:http://hi.baidu.com/operationsystem/blog/item/6e45dd1af1acadf3ae51330b.html

在計算機中,長整型(long int)變數的範圍是 -2147483648 至 2147483647,因此若用長整型變數做乘法運算,乘積最多不能超過 10位數。即便用雙精度型(double)變數,也僅能保證 16 位有效數字的精度。在某些需要更高精度的乘法運算的場合,需要用別的辦法來實現乘法運算。

比較容易想到的是做多位數乘法時列豎式進行計算的方法,只要寫出模擬這一過程的程式,就能實現任意大整數的乘法運算。經過查閱資料,找到一種更易於程式設計的方法,即「列表法」。

下面先介紹「列表法」:

例如當計算8765 x 234時,把乘數與被乘數照如下列出,見表1:                         

把錶1中的數按圖示斜線分組(橫縱座標和相等的數分為一組),把每組數的累加起來所得的和記在**下方,見表 2:

從最低位的 20 開始,保留個位數字「0」,把個位以外的數「2」進到前一位;把次低位的 39 加上低位進上來的 2 得 41,保留個位數字「1」,把「4」進到前一位;以此類推,直至最高位的 16,16 加上低位進上來的4得 20,保留「0」,把2進到最高位,得乘積答數 2051010。

根據以上思路就可以編寫c 程式了,再經分析可得:

1、乙個m 位的整數與乙個 n 位的整數相乘,乘積為m+n-1 位或m+n 位。

2、程式中,用三個字元陣列分別儲存乘數、被乘數與乘積。由第 1 點分析知,存放乘積的字元陣列

的長度應不小於存放乘數與被乘數的兩個陣列的長度之和。

3、可以把第二步「計算填表」與第三四步「累加進製」放在一起完成,可以節省儲存** 2所需的空間。

4、程式關鍵部分是兩層迴圈,內層迴圈累計一組數的和,外層迴圈處理保留的數字與進製。

**如下

大整數乘法

問題描述 by 計算機演算法設計與分析 王曉東 p17 通常,在分析乙個演算法的計算複雜性時,都將加法和乘法運算當作是基本運算來處理,即將執行一次加法或乘法運算所需的計算時間當作乙個僅取決於計算機硬體處理速度的常數。這個假定僅在計算機硬體能對參加運算的整數直接表示和處理時才是合理的。然而,在某些情況...

大整數乘法。

include using namespace std int multi int num1,int size1,int num2,int size2 int size size1 size2 int ret new int size int i 0 for i 0 iret i 0 for i 0...

大整數乘法

高精度計算需要注意的幾個問題 1.用字串的讀入方式,再按字元分別轉成數字2.不能用數值型的讀入方式 二 計算過程中考慮進製和借位問題 先不急於處理,在計算結束時處理 1.陣列第i元素 10 或 0 需要考慮2.從上位增或減1,本位減或加10三 輸出時注意跳過高位多餘的0四 陣列需要稍微大一些,避免運...