高精A+B Problem
#include <iostream> #include <cstdio> using namespace std; int c[100000]; int d[100000]; int e[100000]; int main() { string a, b; cin >> a >> b; if (a == "0") { cout << b; return 0; } if (b == "0") { cout << a; return 0; } for (int i = a.length() - 1; i >= 0; i--) { c[i + 1] = a[i] - '0'; } for (int i = b.length() - 1; i >= 0; i--) { d[i + 1] = b[i] - '0'; } if (a.length() >= b.length()) { for (int i = a.length() ; i > a.length() - b.length(); i--) { if (e[i + 1] + c[i ] + d[i - a.length() + b.length() ] >= 10) { e[i + 1] += c[i ] + d[i - a.length() + b.length() ] - 10; e[i ]++; } else { e[i + 1] += c[i ] + d[i - a.length() + b.length() ]; } } for (int i = a.length() - b.length() ; i >= 0; i--) { if (e[i + 1] + c[i ] >= 10) { e[i + 1] += c[i ] - 10; e[i ]++; } else { e[i + 1] += c[i ]; } } int num = 0; while (e[num] == 0) { num++; } for (int i = num; i <= a.length() + 1; i++) { cout << e[i]; } } else { for (int i = b.length() ; i > b.length() - a.length(); i--) { if (e[i + 1] + c[i - b.length() + a.length()] + d[i] >= 10) { e[i + 1] += c[i - b.length() + a.length()] + d[i] - 10; e[i ]++; } else { e[i + 1] += c[i - b.length() + a.length()] + d[i]; } } for (int i = b.length() - a.length() ; i >= 0; i--) { if (e[i + 1] + d[i ] >= 10) { e[i + 1] += d[i ] - 10; e[i ]++; } else { e[i + 1] += d[i ]; } } int num = 0; while (e[num] == 0) { num++; } for (int i = num; i <= b.length() + 1; i++) { cout << e[i]; } } return 0; }
这是关于高精度加法的第一次尝试。