代码
#include <iostream>
using namespace std;
int main()
{
string s, s1, s2;
cin>>s>>s1>>s2;
while(s1.length()<s.length()){
s1 = "0" + s1;
}
while(s2.length()<s.length()){
s2 = "0" + s2;
}
int jinwei = 0;
char ans[21] = {'0'};
for(int i=s.length()-1; i>=0; i--){
int tmp = s1.at(i)-'0' + s2.at(i)-'0' + jinwei;
int radix = s.at(i)-'0';
if(!radix){
radix = 10;
}
jinwei = tmp/radix;
int remind = tmp%radix;
ans[i+1] = remind+'0';
}
if(jinwei){
ans[0] = jinwei + '0';
}
bool flag = true;
for(int i=0; i<s.length()+1; i++){
if(flag && ans[i]!='0'){
flag = false;
cout<<ans[i];
}
else if(!flag){
cout<<ans[i];
}
}
if(flag){
cout<<0;
}
cout<<endl;
return 0;
}
注解
1、注意补齐两个输入数据的位数,与进制的位数保持一致。
2、0进制转换成10进制。
3、首位可能有进位,因此ans的字节数组长度可能超过20,定义为21。(否则错三个case)
4、结果可能为0。(否则错一个case)
5、忽略前导0。
6、此种题目建议用char数组,最好不要用string。