#include<iostream> #include<string> using namespace std; void paddingLeft(string& s, int num) { if (s.size() == num) return; int padding = num - s.size(); for (int i = 0; i < padding; i++) s = "0" + s; } void paddingRight(string& s, int num) { if (s.size() == num) return; int padding = num - s.size(); for (int i = 0; i < padding; i++) s += "0"; } string sum(string a, string b, int& outputCarry, int inputCarry = 0) { string::reverse_iterator it1 = a.rbegin(); string::reverse_iterator it2 = b.rbegin(); string ans = ""; int carry = inputCarry; while (it1 != a.rend()) { //已经对齐过了反正 int sum = (*it1 - '0') + (*it2 - '0') + carry; //计算本位并拼接字符串 int remain = sum % 10; char digit = '0' + remain; ans = digit + ans; //进位到下一位 carry = sum / 10; it1++; it2++; } outputCarry = carry; return ans; } int main() { string a, b; while (cin >> a >> b) { //提取整数/小数部分 string aU = a.substr(0, a.find('.')); string aL = a.substr(a.find('.') + 1); string bU = b.substr(0, b.find('.')); string bL = b.substr(b.find('.') + 1); //对齐 int dU = aU.size() >= bU.size() ? aU.size() : bU.size(); int dL = aL.size() >= bL.size() ? aL.size() : bL.size(); paddingRight(aL, dL); paddingRight(bL, dL); paddingLeft(aU, dU); paddingLeft(bU, dU); //计算 int cL = 0; //小数部分进位 int cU = 0; //整数部分进位 string sL = sum(aL, bL, cL); string sU = sum(aU, bU, cU, cL); if (cU == 1) sU = '1' + sU; //输出 cout << sU << '.' << sL << endl; } return 0; }