#include <algorithm> #include <cctype> #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <map> #include <set> #include <stack> #include <string> #include <vector> using namespace std; int main(void) { string str1, str2; while (cin >> str1 >> str2) { string z[2], x[2], ans[2]; int flag = 1; for (int i = 0; i < str1.size(); i++) { if (str1[i] == '.') { flag = 0; continue; } if (flag) z[0] += str1[i]; else x[0] += str1[i]; } flag = 1; for (int i = 0; i < str2.size(); i++) { if (str2[i] == '.') { flag = 0; continue; } if (flag) z[1] += str2[i]; else x[1] += str2[i]; } if (x[1].size() > x[0].size()) swap(x[0], x[1]); if (z[1].size() > z[0].size()) swap(z[0], z[1]); int gap = x[0].size() - x[1].size(); reverse(x[0].begin(), x[0].end()); reverse(x[1].begin(), x[1].end()); for (int i = 0; i < gap; i++) { ans[1] += x[0][i]; } int crary = 0; for (int i = 0; i < x[1].size(); i++) { ans[1] += (x[1][i] - '0' + x[0][gap + i] - '0' + crary) % 10 + '0'; crary = (x[1][i] - '0' + x[0][gap + i] - '0' + crary) / 10; } int cnt = 0; for (int i = 0; i < ans[1].size(); i++) { if (ans[1][i] == '0') cnt++; else break; } reverse(ans[1].begin(), ans[1].end()); ans[1].resize(ans[1].size() - cnt); reverse(z[0].begin(), z[0].end()); reverse(z[1].begin(), z[1].end()); for (int i = 0; i < z[1].size(); i++) { ans[0] += (z[1][i] - '0' + z[0][i] - '0' + crary) % 10 + '0'; crary = (z[1][i] - '0' + z[0][i] - '0' + crary) / 10; } for (int i = z[1].size(); i < z[0].size(); i++) { ans[0] += (z[0][i] - '0' + crary) % 10 + '0'; crary = (z[0][i] - '0' + crary) / 10; } if (crary == 1) ans[0] += '1'; reverse(ans[0].begin(), ans[0].end()); cout << ans[0]; flag = 0; if (ans[1].size() > 0) { for (int i = 0; i < ans[1].size() && !flag; i++) { if (ans[1][i] != '0') flag = 1; } if (flag) cout << '.' << ans[1] << endl; else cout << endl; } else { cout << endl; } } } |
Double click to view unformatted code.