C++題解 高精度加法
阿新 • • 發佈:2021-10-31
C++題解 高精度加法
題目分析
給定兩個正整數(不含前導 0),計算它們的和。
輸入格式
共兩行,每行包含一個整數。
輸出格式
共一行,包含所求的和。
資料範圍
1≤整數長度≤100000
輸入樣例:
12
23
輸出樣例:
35
思路
對於該題目的實現,我們使用兩個陣列進行加法的模擬,為了方便此處使用vector。
資料的輸入
可以看到數字的長度遠遠超過了long long的需要,我們需要使用字串進行資料的讀入。
注意,為了運算方便,應該從字串的末尾將原數字倒序的進行讀入,想一想為什麼。
模擬加法
在這裡,我們使用一個整型變數 r
進行運算的儲存。將數字 a
b
的相應位相加後,我們通過儲存 r % 10
r /= 10
,將它作為下一位運算中現在位的進位。
最後,最高位相加完成後,判斷最高位是否存在進位,若真則進行相應處理。
資料的輸出
按照人類的習慣,我們將陣列從最高位開始輸出即可。
以下是程式碼實現
// // Created by Owwkmidream on 2021/10/30. // #include "iostream" #include "vector" using namespace std; vector<int> add(vector<int>& A, vector<int>& B) { vector<int> C; if(A.size() < B.size()) return add(B, A); int r = 0; for (int i = 0; i < A.size(); ++i) { r += A[i]; if(i < B.size()) r += B[i]; C.push_back(r % 10); r /= 10; } if(r) C.push_back(r); return C; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); vector<int> A, B; string a, b; cin >> a >> b; for (int i = a.size() - 1; i >= 0 ; --i) A.push_back(a[i] - '0'); for (int i = b.size() - 1; i >= 0 ; --i) B.push_back(b[i] - '0'); auto C = add(A, B); for (int i = C.size() - 1; i >= 0 ; --i) cout << C[i]; return 0; }