先把输入的数每个数字倒过来依次放在数组里。然后按步骤进行:
- 只管加法,对齐数组各位然后每一位相加就好。
- 进位,如果当前位 ,给前面进位,即前面那一位加上当前位 ,当前位 ,由于如果当前位 这个操作做了等于白做,所以省去
if判断也可以。 - 处理前导零,然后再翻过来存入字符串返回输出结果。
#include<iostream>
using namespace std;
string add(string x,string y){
int a[1005]={},b[1005]={},c[1005]={},lena,lenb,lenc;
string ans="";
lena=x.size();
lenb=y.size();
for(int i=1; i<=lena; i++) {
a[i]=x[lena-i]-'0';
}
for(int i=1; i<=lenb; i++) {
b[i]=y[lenb-i]-'0';
}
lenc=max(lena,lenb);
//第1步,只管加
for(int i=1; i<=lenc; i++) {
c[i]=a[i]+b[i];
}
//第2步,处理进位
for(int i=1; i<=lenc; i++) {
c[i+1]+=c[i]/10;
c[i]%=10;
}
//第3步,处理
if(c[lenc+1]) lenc++;
//重转字符串
for(int i=lenc; i>=1; i--) {
ans=ans+char(c[i]+48);
}
return ans;
}
int main() {
string x,y;
cin>>x>>y;
cout<<add(x,y);
return 0;
}
(代码为 2024-04-21 编写,和现在码风有区别,码风可能“好看”,将就看一下吧)
暂无评论