#include<iostream> #include<cstring> #include<cstdio> #include<string> #include<vector> using namespace std; int main() { string a, b; while (cin >> a >> b) { string z1; string z2; vector<char>res1;//整数部分和 int i = 0; while (i < a.size()) { if (a[i] == '.') { break; } i++; } vector<char>a1; vector<char>a2; vector<char>res; z1 = a.substr(0, i); int len1 = i; int cnt1 = a.size() - i; if (cnt1 == 0) { cnt1++; //a1.push_back('0'); } for (int j = i + 1;j < a.size();j++) a1.push_back(a[j]); i = 0; while (i < b.size()) { if (b[i] == '.') { break; } i++; } z2 = b.substr(0, i); int len2 = i; int cnt2 = b.size() - i; if (cnt2 == 0) { cnt2++; //a1.push_back('0'); } if (len1 < len2) { string ss(len2 - len1, '0'); z1 = ss + z1; } else { string ss(len1 - len2, '0'); z2 = ss + z2; } //int carry = 0; for (int j = i + 1;j < b.size();j++) a2.push_back(b[j]); if (cnt1 < cnt2) { for (int k = 0;k < cnt2 - cnt1;k++) a1.push_back('0'); } else { for (int k = 0;k < cnt1 - cnt2;k++) a2.push_back('0'); } int carry = 0; for (int j = a1.size() - 1;j >= 0;j--) { int z = (a1[j] - '0' + a2[j] - '0' + carry) % 10; carry= (a1[j] - '0' + a2[j] - '0' + carry) /10; res.push_back(z + '0'); } //if(carry!=0) for (int j = z1.size() - 1;j >= 0;j--) { int z = (z1[j] - '0' + z2[j] - '0' + carry) % 10; carry = (z1[j] - '0' + z2[j] - '0' + carry) / 10; res1.push_back(z + '0'); } if (carry != 0) cout << "1"; for (int j = res1.size() - 1;j >= 0;j--) cout << res1[j]; for (int j = res.size() - 1;j >= 0;j--) { if (res[j] != '0') { cout << "."; break; } } int flag = 0; for (int j = res.size() - 1;j >= 0;j--) { if(res[j]!='0'||flag==1) cout << res[j]; } cout << endl; } return 0; } |
Double click to view unformatted code.