#include<iostream>
using namespace std;
string add(string x, string y){
string sum = "";
bool plus_one = false, xone = false, yone = false;
unsigned long long xlen = x.size() - 1, ylen = y.size() - 1;
for(unsigned long long i = 0; i < max(x.size(),y.size()); ++i) {
if(xone == true) {
if(plus_one == true) {
sum[i] += y[ylen - i] - '0';
plus_one = false;
if(sum[i] > '9'){
sum[i] -= 10;
sum += '1';
plus_one = true;
}
}
else {
sum += '0' + (y[ylen - i] - '0');
}
}
else if(yone == true) {
if(plus_one == true) {
sum[i] += x[xlen - i] - '0';
plus_one = false;
if(sum[i] > '9'){
sum[i] -= 10;
sum += '1';
plus_one = true;
}
}
else {
sum += '0' + (x[xlen - i] - '0');
}
}
else {
if(xlen - i == 0){
xone = true;
}
if(ylen - i == 0){
yone = true;
}
if(plus_one == true) {
sum[i] += ((x[xlen - i] - '0') + (y[ylen - i] - '0')) % 10;
plus_one = false;
if(sum[i] > '9') {
sum[i] -= 10;
plus_one = true;
}
}
else {
sum += '0' + (((x[xlen - i] - '0') + (y[ylen - i] - '0')) % 10);
}
if('0' + (x[xlen - i] - '0') + (y[ylen - i] - '0') > '9' || plus_one == true) {
sum += '1';
plus_one = true;
}
}
}
for(unsigned long long i = 0, t = sum.size() - 1; i < t; ++i, --t) {
char tmp = sum[i];
sum[i] = sum[t];
sum[t] = tmp;
}
return sum;
}
int main() {
string n,m;
cin >> n >> m;
cout << add(n,m);
return 0;
}
优化点:
1.这玩意性能实在太拉 算斐波那契数列算到30000位就算不来
2.不支持小数和负数 求优化