大數乘法 藍橋杯

2021-06-21 02:55:02 字數 649 閱讀 8697

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

如圖【1.jpg】表示了分塊乘法的原理。可以把大數分成多段(此處為2段)小數,然後用小數的多次運算組合表示乙個大數。可以根據int的承載能力規定小塊的大小,比如要把int分成2段,則小塊可取10000為上限值。注意,小塊在進行縱向累加後,需要進行進製校正。

以下**示意了分塊乘法的原理(乘數、被乘數都分為2段)。

void bigmul(int x, int y, int r)

int main(int argc, char* argv)

;bigmul(87654321, 12345678, x);

printf("%d%d%d%d\n", x[0],x[1],x[2],x[3]);

return 0;

}請分析**邏輯,並推測劃線處的**。

答案寫在 「解答.txt」 檔案中

注意:只寫劃線處應該填的內容,劃線前後的內容不要抄寫。

n2 / base + n3 / base + n4 % base  

r[2] / base 

藍橋杯 歷屆試題 大數乘法

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

藍橋杯 階乘計算(大數乘法)

基礎練習 階乘計算 時間限制 1.0s 記憶體限制 512.0mb 問題描述 輸入乙個正整數n,輸出n 的值。其中n 1 2 3 n。演算法描述 n 可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用乙個陣列a來表示乙個大整數a,a 0 表示a的個位,a 1 表示a的十位,依次類...

藍橋杯 大數分塊乘法 模擬乘法

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