题解
2024-02-28 21:50:27
发布于:上海
8阅读
0回复
0点赞
因为数据范围会超出unsigned long long,所以要使用string来做操作
在开始之前要明白:
1.这是用string模拟加法操作,可以把它像列竖式一样,先把它反转,从个位相加,最后处理完再反转
2.string的每一位其实可以是char类型的ASCII码值为48~57的,两者相加要再减掉一个48
3.string的进位可以用bool类型来存储,到时候进位直接相加
4.要考虑到string的长度问题
为了方便观察,定义函数add(string s1,string s2)来完善程序
AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
string add(string s1,string s2){
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
string s3="";
bool add01=0;
if(s1.size()>s2.size())swap(s1,s2);
for(int i=0;i<s1.size();i++){
char c=s1[i]+s2[i]-48+add01;
add01=0;
if(c>57)add01=1,c-=10;
s3.append(1,c);
}for(int j=s1.size();j<s2.size();j++){
char c=s2[j]+add01;
add01=0;
if(c>57)add01=1,c-=10;
s3.append(1,c);
}if(add01)s3.append(1,'1');
reverse(s3.begin(),s3.end());
return s3;
}
int main(){
string s1,s2;
cin>>s1>>s2;
cout<<add(s1,s2);
return 0;
}
这里空空如也
有帮助,赞一个