#include<iostream> #include<string> #include<algorithm> using namespace std; string jian(string s1, string s2) { string flag(""); if (s1.size() < s2.size() || s1.size() == s2.size() && s1 < s2) { swap(s1, s2); flag = "-"; } int len = s1.size() - s2.size(), i = 0, k = 0, y; for (; i < len; i++) s2 = '0' + s2; len = s1.size() - 1; for (i = len; i >= 0; i--) { y = s1[i] - s2[i] + k; if (y >= 0) { s1[i] = '0' + y; k = 0; } else { s1[i] = '0' + y + 10; k = -1; } } for (i = 0; i < len&&s1[0] == '0'; i++) s1.erase(0, 1); return flag + s1; } string jia(string s1, string s2) { if (s1.size() > s2.size())swap(s1, s2); int len = s2.size() - s1.size(); for (int i = 0; i < len; i++) s1 = '0' + s1; int k = 0; for (int i = s1.size() - 1; i >= 0; i--) if (s1[i] + s2[i] - 2 * '0' + k < 10) { s1[i] = s1[i] + s2[i] - '0' + k; k = 0; } else { s1[i] = s1[i] + s2[i] - '0' + k - 10; k = 1; } if (k)s1 = '1' + s1; return s1; } int main() { int T; cin >> T; while (T--) { string s1, s2; cin >> s1; int flag = 0; if (s1.find('+', 1) != -1)flag = 1; int p = max((int)s1.find('+', 1), (int)s1.find('-', 1)); s2 = s1.substr(p + 1); s1.erase(p); int sign(1); if (s1[0] == '-') { s1.erase(0, 1); sign = 0; } if (flag && sign)cout << jia(s1, s2) << endl; else if (flag && !sign)cout << jian(s2, s1) << endl; else if (!flag && sign)cout << jian(s1, s2) << endl; else cout<<'-'<< jia(s1, s2) << endl; } } |
Double click to view unformatted code.