// 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; } // 最高位如果产生进位,则在末尾补1 if (t == 1) C.push_back(1); return C; }
// 若位数相同,则从最高位起依次判断 for (int i = A.size() - 1; i >= 0; i -- ) if (A[i] != B[i]) return A[i] > B[i];
returntrue; }
// 假定两个正整数且 A≥B vector<int> sub(vector<int> &A, vector<int> &B) { vector<int> C; int t = 0; for (int i = 0; i < A.size(); ++i) { t = A[i] - t; // 判断B是否存在相应位 if (i < B.size()) t -= B[i]; // 学习下面的处理方式 C.push_back((t + 10) % 10); // t<0 需要借位 if (t < 0) t = 1; else t = 0; } // 减法有个问题:要去除前导0 // 例如 321 - 320 = 001 去掉前面两个0 while (C.size() > 1 && C.back() == 0) C.pop_back(); return C; }
intmain() { 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'); for (int i = b.size() - 1; i >= 0; i -- ) B.push_back(b[i] - '0');
vector<int> C;
if (cmp(A, B)) C = sub(A, B); else C = sub(B, A), cout << '-';
for (int i = C.size() - 1; i >= 0; i -- ) cout << C[i]; cout << endl;