C++高精度模板
阿新 • • 發佈:2020-12-05
#include <iostream> #include <string> #include <vector> using namespace std; // 兩個高精度整數相加 vector<int> add (vector<int> &A, vector<int> &B) { vector<int> ans; int t = 0; for (int i = 0; i < A.size() || i < B.size(); i++) { if (i < A.size()) t += A[i]; if (i < B.size()) t += B[i]; ans.push_back(t % 10); t /= 10; } if (t) ans.push_back(1); return ans; } // A, B非負 並且 A.size() > B.size() vector<int> sub (vector<int> &A, vector<int> &B) { vector<int> ans; int t = 0; for (int i = 0; i < A.size(); i++) { t = A[i] - t; if(i < B.size()) t -= B[i]; ans.push_back((t + 10) % 10); if (t < 0) t = 1; //判斷借位 else t = 0; } while(ans.size() > 1 && ans.back() == 0){ ans.pop_back(); } return ans; } // A / b, 商 是c 餘數是 r vector<int> div(vector<int> A, int b, int &r) { vector<int> ans; r = 0; for (int i = A.size() - 1; i >= 0; i--) { r = r * 10 + A[i]; ans.push_back(r / b); r %= b; } reverse(ans.begin(), ans.end()); while (ans.size() > 1 && ans.back() == 0) ans.pop_back(); return ans; } int main () { string a; string b; vector<int> A, B, ans; 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'); ans = add(A, B); for (int i = ans.size() - 1; i >= 0; i--) { printf("%d", ans[i]); } return 0; }