如下,是加法的方法。
#include<string> #include<vector> #include<algorithm> #include<iostream> using namespace std; template <class T> void reverse(T& s) { int begin = 0; int end = s.size() - 1; while (begin < end) { swap(s[begin++], s[end--]); } } int atoi(char ch) { return ch - '0'; } void my_main(string &num1, string &num2) { vector<int> ret; if (num1.size() == 0 || num1[0] == '0') { for (auto e : num2) { cout << e; } return; } if (num2.size() == 0 || num2[0] == '0') { for (auto e : num1) { cout << e; } return; } reverse(num1), reverse(num2); int i = 0, j = 0, temp = 0; int len1 = num1.size(); int len2 = num2.size(); ret.reserve(std::max(len1, len2) + 1); int carry = 0; for (; i < len1 || j < len2; i++, j++) { int first = i < len1 ? atoi(num1[i]) : 0; int second = j < len2 ? atoi(num2[j]) : 0; ret.push_back( (first+second + carry) % 10); if ((first+second+carry) >= 10) carry = 1; else carry = 0; } if (carry == 1)ret.push_back(1); reverse(ret); for (auto e : ret) { cout << e; } cout << '\n'; } int main() { string num1, num2; while (cin >> num1 >> num2) { my_main(num1, num2); } return 0; }