具体原理没什么好说的,模拟,重要的是如何处理最完美。
我的有道云上有更完美的版本。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
int la,lb,lans,ans[270];
char a[270],b[270];
void Turn(char *Tmp,int Len) {
for(int i = 0; i<=Len; i++) {
Tmp[i] -= '0';
}
}
int main() {
std::ios::sync_with_stdio(false);
cin>>a>>b;
la = strlen(a)-1;
lb = strlen(b)-1;
Turn(a,la);
Turn(b,lb);
int carry = 0;
for(int i = la,j = lb; i >= 0 || j >= 0; lans++,i = max(i - 1,-1),j = max(j - 1,-1)) {
ans[lans] = a[i] + b[j] + carry;
carry = ans[lans] / 10;
ans[lans] %= 10;
}
if(carry) {
ans[lans] += carry;
}
while(!ans[lans] && lans >= 1) {
lans--;
}
for(int i = lans; i>=0; i--) {
printf("%d",ans[i]);
}
return 0;
}