#include<bits/stdc++.h>
#define MAXN 10500
using namespace std;
string _add(string a, string b) {
string sum;
int na[MAXN] = {0}, nb[MAXN] = {0}, ans[MAXN + 1] = {0};
for(int i = a.size(); i > 0; i --)na[i] = a[a.size() - i] - '0';
for(int i = b.size(); i > 0; i --)nb[i] = b[b.size() - i] - '0';
int maxl = max(a.size(), b.size());
for(int i = 1; i <= maxl; i ++) {
ans[i + 1] = (ans[i] + na[i] + nb[i]) / 10;
ans[i] = (ans[i] + na[i] + nb[i]) % 10;
}//相加
if(ans[maxl + 1] != 0)sum += "1";//特判 防止最大位进位
for(int i = maxl; i > 0; i --)sum += ans[i]+'0';
if(sum == "-0") {
sum.erase(0, 1);
}
return sum;
}
string _minus(string a, string b) {
int na[MAXN] = {0}, nb[MAXN] = {0}, ans[MAXN] = {0};
string diff;
if((a < b && a.size() <= b.size()) || b.size() > a.size())
return "-" + _minus(b, a);
for(int i = a.size(); i > 0; i --)na[i] = a[a.size() - i] - '0';
for(int i = b.size(); i > 0; i --)nb[i] = b[b.size() - i] - '0';
int maxl = max(a.size(), b.size());
for(int i = 1; i <= maxl; i ++) {
if(na[i] < nb[i]) {
na[i + 1] --;
na[i] += 10;
}
ans[i] = na[i] - nb[i];
}
while(ans[maxl] == 0)maxl --;//防止减后降位,多输出若干0
if(maxl < 1)return "0";
for(int i = maxl; i > 0; i --)diff += ans[i] + '0';//数组转化为字符串。
if(diff == "-0") {
diff.erase(0, 1);
}
return diff;
}
int main() {
string a, b;
cin >> a >> b;
if(a[0] == '-' && b[0] == '-') { //当两个数字为负数
a.erase(0, 1);
b.erase(0, 1);
cout << _add(b,a);
return 0;
} else if(a[0] == '-') {
a.erase(0, 1);
cout << "-" << _minus(a, b); //-a-b=-(a+b)
return 0;
} else if(b[0] == '-') { //只有b为负数
b.erase(0, 1);
cout << _minus(a, b); //a-(-b)=a+b
return 0;
} else
cout << _add(a, b);
return 0;
}
求调,呜呜