C語言中的高精度乘法

2021-07-06 11:05:38 字數 2459 閱讀 9155

4整體的**

5結語

我們知道,計算機內部直接用int或double等資料型別儲存數字是有範圍限制的,即當資料運算大小過大後,計算機將會出現溢位情況,使得計算結果不夠精確。為了能夠使計算機精確地計算高位的數字,我們需要學會使用高精度乘法。

事實上,高精度乘法就是通過程式設計的方法,把我們小學時候簡單的數學乘法運算的步驟在計算機上完美的演示一遍而已

既然是乙個很大的整數,我們便不能夠再用簡單的資料型別直接儲存這些整數。我們可以自然得想到要通過陣列或字串來儲存數字。字串的特點方便我們對於高位整數的輸入,而整形陣列的簡便性更有利於每個位數的計算,因而我們結合兩者的優點,不難得出高精度乘法的大致流程:

a、通過兩個字串輸入兩個整數;

b、引人兩個陣列,將兩個整數通過一定的運算,分別將每一位的數字儲存進陣列中;

c、進行每一位的運算;

d、處理進製;

e、輸出結果;

下面我們通過**來一步步實現它

#include

#include

int main()

for (i = 0, j = m - 1; i

< m; i++, j--)

通過ascii碼的運算,我們已經成功地將兩個乘數的各位數拆開來儲存進兩個陣列中了,並且a[0]為個位,a[1]為十位,以此類推。此時高精度乘法運算前的準備已經做好。

我們再宣告乙個陣列c來儲存答案。大家通過乙個簡單的乘法運算進行模擬就可以看出,以同樣的儲存規則,a[0] * b[0] = c[0]; a[0] * b[1] + a[1] * b[0] = c[1];逐漸我們可以發現規律: "c[i + j] += a[i] * b[j]"同過乙個迴圈去實現,就可以把c[i + j]計算出來,需要指出的是,這裡的計算我們還沒有進行進製處理。

1 2 3

* 5 6 7

*--------------------------

7 14 21

6 12 18

5 10 15

*--------------------------

5 16 34 32 21

下面上**:

int c[3000];

for (i = 0; i

< 3000; i++)

for (i = 0; i

< n; i++)

}

注意一下:這裡陣列c的長度並不一定是3000,操作者可以根據實際情況來調整結果最大位數的大小,雖然我覺得3000是夠用了。。。

for (i = 0; i

< n + m; i++)

}

這個進製的處理**並不難,有一定c語言初級基礎的人都可以看懂(筆者寫這篇部落格時候還只是乙個上大一2個月的新生呢。。。)

好了,現在我們要輸出結果了。我們知道,現在c陣列裡儲存著結果的各位數字,我們只需要按照正確的順序把數字乙個個print出來就可以了!

for (j = 2999; j > 0; j--) 

for (i = j; i >= 0; i--)

printf("\n");

return

0;}

在這裡我需要指出的是,因為c陣列的長度是固定的,但我們並不知道最終的結果有多少位,而我們又可以看出結果應該從後往前print。所以在輸出前需要用乙個for迴圈確定一下結果的位數。(筆者能力有限,暫時還沒有想出更好的方法。。。)

確定了位數之後,就從後往前輸出就可以得到正確的答案了!!!

(有點小激動。。。)

#include

#include

int main()

for (i = 0, j = m - 1; i < m; i++, j--)

int c[3000];

for (i = 0; i < 3000; i++)

for (i = 0; i < n; i++)

}

for (i = 0; i < n + m; i++)

}for (j = 2999; j > 0; j--)

for (i = j; i >= 0; i--)

printf("\n");

return

0;}

筆者是中山大學軟體工程專業的一位大一新生,最近剛接觸到高精度乘法,覺得有點神奇,於是寫下這篇部落格(這是我的第一篇與技術有關的部落格。。。),再梳理一遍後思路的確更加清晰了。由於還沒有深入精通c語言,所以這個高精度乘法的**還不夠簡潔,高手勿噴。如果大家有更好的建議歡迎提出交流,我會虛心學習的。同時,希望這篇部落格能夠幫助到更多的接觸高精度乘法的c語言初學者們,我個人覺得寫得還是挺通俗易懂的。。。

如果有個別字打錯的,請多包涵。。。

好了,最後謝謝大家的認真閱讀!!!!!!

c語言高精度乘法

眾所周知,由於整型數不能滿足過大數的運算,所以,在進行過大數的乘法運算時需要運用一種新的方法 高精度乘法。下面我將介紹大數相乘的幾個步驟。1.輸入兩個乘數,並定義後面需要到的變數 include include intmain void 3.我們再宣告乙個陣列c來儲存答案。大家通過乙個簡單的乘法運算...

高精度乘法 C

原理 陣列記錄每一位,最後處理進製 計算201 98,則先計算201 8,再計算201 9,逐位相乘。豎式計算。儲存201和98,逆序儲存到陣列裡面。01 2345 6789 1020 0000 0001 2345 6789 8900 0000 00逐位相乘,得到結果放到result陣列裡面,最後處...

c 高精度乘法(大數乘法)

對於計算機無法用普通資料型別 如 longint 表示的大整數進行乘法運算,稱為高精度乘法。高精度乘法主要包括以下幾個要求及過程 1 為了獲取輸入數字的每一位的值,包括個位,十位等,輸入整型的資料是無法滿足的,因此,輸入資料必須為字串形式。2 字串轉整型,儲存每一位值於陣列中 3 高精度乘法,重點!...