// 大致思路是:如123456789.987 + 789.123456变成如下
// 0123456789.987000
// + 0000000789.123456
// = 0123457579.110456
#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
void leftPadding(string& str, int len) {
len -= str.size();
while (len--) {
str = '0' + str;
}
}
void rightPadding(string& str, int len) {
len -= str.size();
while (len--) {
str += '0';
}
}
string sum(string str1, string str2) {
int carry = 0; // 进位
string res; // 存放结果
string::reverse_iterator it1 = str1.rbegin();
string::reverse_iterator it2 = str2.rbegin();
while (it1 != str1.rend()) {
int num = *it1 - '0' + *it2 - '0' + carry;
int left = num % 10;
carry = num / 10;
res = (char)(left + '0') + res;
it1++;
it2++;
}
return res;
}
int main() {
string f1, f2; // 输入的两个浮点数
string H1, L1; // 浮点数1的整数部分和小数部分
string H2, L2; // 浮点数2的整数部分和小数部分
cin >> f1 >> f2;
H1 = f1.substr(0, f1.find('.'));
L1 = f1.substr(f1.find('.') + 1);
H2 = f2.substr(0, f2.find('.'));
L2 = f2.substr(f2.find('.') + 1);
// 防止最高位进位,故在左边多留一个0
int left = H1.size() > H2.size() ? H1.size() + 1 : H2.size() + 1;
int right = L1.size() > L2.size() ? L1.size() : L2.size();
leftPadding(H1, left);
leftPadding(H2, left);
rightPadding(L1, right);
rightPadding(L2, right);
string res = sum(H1 + L1, H2 + L2);
int i = 0;
// 若最高位为0则不输出,否则输出
if (res[0] == '1')
cout << res[0];
for (i = 1; i < left; i++) {
cout << res[i];
}
cout << '.';
for (; i < res.length(); i++)
cout << res[i];
cout << endl;
return 0;
}