#include<iostream>
#include<vector>
#include<string>
using namespace std;
//写一个用来比较数位大小的函数
bool bi(vector<int>& a, vector<int>& b)
{
if (a.size() != b.size())
{
return a.size() > b.size();//这句话的意思是如果a的数位比b的数位大,那我们就返回真,否则返回假
}
else {
for (int i = a.size() - 1; i >= 0; i--)
{
if (a[i] != b[i])
{
return a[i] > b[i];//这里是从个位开始比较,如果同位上的数字a比较大,就返回真,否则返回假
}
}
}
return 0;
}
//接下来是加法函数的实现
vector<int> add(vector<int>& a, vector<int>& b)
{
vector<int>c;
int t = 0;//t是用于进位的数
for (int i = 0; i < a.size() || t != 0; i++)
{
if (i < b.size()) {
//这里如果还没遍历完b,我们就对a,b数组同位求和加上进位t取余数作为该位的结果
c.push_back((a[i] + b[i] + t) % 10);
//这里是把t设置为进位值
t = (a[i] + b[i] + t) / 10;
}
else if (i >= b.size() && i < a.size()) {
//如果遍历完b数组,我们继续遍历a数组,继续上面的操作,不过这时候就要把b数组去掉了
c.push_back((t + a[i]) % 10); t = (t + a[i]) / 10; }
//如果a,b数组都遍历完了,而且还有进位的话,我们最后一位添上进位的值,把t赋值为0,结束加法运算
else { c.push_back(t); t = 0; }
}
return c;
}
int main()
{
string a, b;
vector<int>a1, b1;
vector<int>c;
cin >> a >> b;
for (int i = a.size() - 1; i >= 0; i--)
{
//这里是讲字符数字转化为动态数组中的数字
a1.push_back(a[i] - '0');
}
for (int i = b.size() - 1; i >= 0; i--)
{
//同理
b1.push_back(b[i] - '0');
}
if (bi(a1, b1))
{
//判断a,b的大小,如果a大,a就放在前面,
反之,b放在前面
c = add(a1, b1);
}
else { c = add(b1, a1); }
while (c.size() > 1 && c.back() == 0)
{
//这里对结果的c数组做一个去掉前导0的操作
c.pop_back();
}
for (int i = c.size() - 1; i >= 0; i--)
{
//输出最终答案
cout << c[i];
}
return 0;
}