题目链接:点击查看
题目描述:
给定两个由数字组成的字符串,求它们相加的结果。
输入输出:
输入: num1 = "99", num2 = "1"输出: 100
题目分析:
本题考查加法的原理及对于加法的模拟。因为相加运算是从后往前进行的,所以可以先翻转字符串,再逐位计算。这种类型的题注重考察的是细节,如进位、位数差等等。详见如下代码。
代码:
string addStrings(string num1,string num2)
{
string output("");//将两数的和以字符串的形式输出 可以摆脱整型大小的限制
reverse(num1.begin(),num1.end());//翻转字符串 方便从后向前计算
reverse(num2.begin(),num2.end());
int onelen=num1.length(),twolen=num2.length();//onelen twolen分别表示num1,num2的长度
if(onelen<=twolen)
{
swap(num1,num2);
swap(onelen,twolen);
}
int addbit=0;//用来记录是否需要进位 需要进位则在
for(int i=0;i<twolen;++i)
{
int cur_sum=(num1[i]-'0')+(num2[i]-'0')+addbit;
output+=to_string((cur_sum)%10);
addbit=cur_sum<10?0:1;
}
for(int i=twolen;i<onelen;++i)
{
int cur_sum=(num1[i]-'0')+addbit;
output+=to_string((cur_sum)%10);
addbit=cur_sum<10?0:1;
}
if(addbit)//检查最后一位是否需要再进位
{
output+="1";
}
reverse(output.begin(),output.end());//将output进行翻转即得到正确的输出结果
return output;
}