#考研机试
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
string GetInteger(string a) {
return a.substr(0, a.find('.'));
}
string GetFraction(string a) {
return a.substr(a.find('.') + 1, a.size() - a.find('.'));
}
void FractionPlus(string& res, int &carry, string fa, string fb) {
int size = max(fa.size(), fb.size());
res.resize(size);// 为res申请内存空间
while (fa.size() < size) {
fa.push_back('0');
}
while (fb.size() < size) {
fb.push_back('0');
}
for (int i = size-1; i >=0; --i) {
if (fa[i] + fb[i] + carry - '0' > '9') {
res[i] = fa[i] + fb[i] + carry - '0' - 10;
carry = 1;
}
else {
res[i] = fa[i] + fb[i] + carry - '0';
carry = 0;
}
}
}
void IntegerPlus(string& res, int carry, string ia, string ib) {
res.clear();
for (int i = ia.size() - 1, j = ib.size() - 1; i >= 0 || j >= 0 || carry == 1; --i, --j) {
if (i >= 0 && j >= 0) {
if (ia[i] + ib[j] + carry - '0' > '9') {
res.insert(res.begin(), ia[i] + ib[j] + carry - '0' - 10);
carry = 1;
}
else {
res.insert(res.begin(), ia[i] + ib[j] + carry - '0');
carry = 0;
}
}
else if (i >= 0 && j < 0) {
if (ia[i] + carry > '9') {
res.insert(res.begin(), ia[i] + carry - 10);
carry = 1;
}
else {
res.insert(res.begin(), ia[i] + carry);
carry = 0;
}
}
else if (i < 0 && j >= 0) {
if (ib[j] + carry > '9') {
res.insert(res.begin(), ib[j] + carry - 10);
carry = 1;
}
else {
res.insert(res.begin(), ib[j] + carry);
carry = 0;
}
}
else {
// 此时i<0&&j<0,进入条件为carry=1
res.insert(res.begin(), '1');
}
}
}
// KY79 浮点数加法
int main() {
//string a = "123.456";
//string b = "222.333333";
char a[1000];
char b[1000];
while (scanf("%s%s", a, b) != EOF) {
string fres = { 0 };
string ires = { 0 };
int carry = 0;
string ia = GetInteger(a);
string ib = GetInteger(b);
string fa = GetFraction(a);
string fb = GetFraction(b);
FractionPlus(fres, carry, fa, fb);
IntegerPlus(ires, carry, ia, ib);
printf("%s.%s", ires.c_str(), fres.c_str());
}
return 0;
}