题意:给你两个整数a,b,计算a+b 的和是多少?(a>0,b>0)
题解:模拟加法
没压位
/*** 高精度加法:模拟计算 1.大整数存储: A3A2A1A0 A < 10 A:0~9 len(A) < 10 A:0~999999999 ***/ #include <iostream> #include <vector> #include <cstdio> using namespace std; const int N = 1e6 + 7; // C = A + B; vector<int>add(vector<int> &A, vector<int>&B) { vector<int> C; 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]; C.push_back(t % 10); t /= 10; } if(t) C.push_back(1); //是否进位 return C; } int main() { string a,b; vector<int> A,B; cin>>a>>b; for(int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0'); // A = [6 , 5, 4, 3, 2, 1] for(int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0'); // B = [6 , 5, .........1] vector<int> C = add(A, B); for(int i = C.size() - 1; i >= 0; i--) printf("%d",C[i]); return 0; }
压位
#include <iostream> #include <vector> #include <cstdio> using namespace std; const int base = 1e9; //压9位 vector<int> add(vector<int> &A, vector<int> &B) { vector<int> C; int t = 0; for (int i = 0; i < A.size(); i ++ ) { if(i < A.size()) t += A[i]; if(i < B.size()) t += B[i]; C.push_back(t % base); t /= base; } if (t) C.push_back(t); return C; } int main() { string a, b; vector<int> A, B; cin >> a >> b; for (int i = a.size() - 1, s = 0, j = 0, t = 1; i >= 0; i -- ) { s += (a[i] - '0') * t; j ++, t *= 10; if (j == 9 || i == 0) { A.push_back(s); s = j = 0; t = 1; } } for (int i = b.size() - 1, s = 0, j = 0, t = 1; i >= 0; i -- ) { s += (b[i] - '0') * t; j ++, t *= 10; if (j == 9 || i == 0) { B.push_back(s); s = j = 0; t = 1; } } vector<int> C = add(A, B); cout << C.back(); for (int i = C.size() - 2; i >= 0; i -- ) printf("%09d", C[i]); //前导 0 不输出 cout << endl; return 0; }