【Code pratice】—— 大数乘法
Date:2022?10?07\color{33CCFF}{Date:2022-10-07}Date:2022?10?07
Last\color{33CCFF}{Last}Last night\color{33CCFF}{night}night a\color{33CCFF}{a}a few\color{33CCFF}{few}few extra\color{33CCFF}{extra}extra minutes\color{33CCFF}{minutes}minutes preparation,\color{33CCFF}{preparation,}preparation, fewer\color{33CCFF}{fewer}fewer hours\color{33CCFF}{hours}hours of\color{33CCFF}{of}of trouble\color{33CCFF}{trouble}trouble today!\color{33CCFF}{today!}today!
文章目錄
- 🥠1. 大數乘法🥠
- 🍖題目🍖
- 🍖思路🍖
- 🍖代碼🍖
🥠1. 大數乘法🥠
🍖題目🍖
對于32位字長的機器,大約超過20億,用int類型無法表示,我們可以選擇int64類型,但無論怎么擴展,固定的整數類型總有表達的極限!如果對超級大整數進行精確運算呢?一個簡單的方法就是:僅僅使用現有的類型,但是把大整數的運算化為若干個小證書的運算,即所謂:“分塊法”,原理如下圖
🍖思路🍖
本題關鍵在于理解分塊乘法的原理,原理中的分塊很好理解,乘法也很好理解,難理解的是進位
- 回歸:如果當前結果是由前段分塊乘積得來,那么結果也要對應的回歸到前段的隊伍中,反之亦然
- 進位:就是熟知的加法運算中的進位,如滿10進1等
舉個例子
X = 23, Y= 34, 分兩段,以10為界
- x1 = X % 10 = 3, x2 = X / 10 = 2
- y1 = Y % 10 = 4, y2 = Y / 10 = 3
- m1 = x1 * y1 = 12;
- m2 = x2 * y1 = 8;
- m3 = x1 * y2 = 9;
- m4 = x2 * y2 = 6;
- 回歸
- r1 = m4(前段) = 6 / 10 = 0;
- r2 = m2(前段) + m3(前段) + m4(后段) = 8 / 10 + 9 / 10 + 6 % 10 = 6;
- r3 = m1(前段) + m2(后段) + m3(后段) = 12 / 10 + 8 % 10 + 9 % 10 = 18;
- r4 = m1(后段) = 12 % 10 = 2;
r2 = r2 + r3 / 10 = 6 + 1 = 7
r3 = r3 % 10 = 18 % 10 = 8
r1 = r1 + r2 / 10 = 0 + 6 / 10 = 0
r2 = r2 % 10 = 6 % 10 = 6
🍖代碼🍖
void MultiLargeNumbers(int i_uXnum, int i_uYnum, int i_uBase) {vector<int> res(4, 0);/* 1. 獲取各部分小數 */int x1 = i_uXnum % i_uBase;int x2 = i_uXnum / i_uBase;int y1 = i_uYnum % i_uBase;int y2 = i_uYnum / i_uBase;/* 2. 獲取m1, m2, m3, m4 的值 */int m1 = x1 * y1;int m2 = x2 * y1;int m3 = x1 * y2;int m4 = x2 * y2;/* 3. 保存r1, r2, r3, r4 的初步結果 */res[0] = m4 / i_uBase;res[1] = m2 / i_uBase + m3 / i_uBase + m4 % i_uBase;res[2] = m1 / i_uBase + m2 % i_uBase + m3 % i_uBase;res[3] = m1 % i_uBase;/* 4. 根據乘積,進行進位處理 */res[1] += res[2] / i_uBase;res[2] %= i_uBase;res[0] += res[1] / i_uBase;res[1] %= i_uBase;/* 5. 輸出最后結果 */cout << "Final result = [" << res[0] << res[1] << res[2] << res[3] << "]" << endl; }總結
以上是生活随笔為你收集整理的【Code pratice】—— 大数乘法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第三方Android 模拟器流畅速度快,
- 下一篇: OSG 源码编译