字符串经典题之大数相加
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串经典题之大数相加相关的知识,希望对你有一定的参考价值。
题目
解答
相加时按照对应为相加即可,注意有的时候相加可能会导致进位,所以我们可以定义一个变量next,next取值为0表示不进位,next取值为1表示进位。拿出对应位的字符的时候,将他们加起来(也包括next),然后判断相加的结果是否大于10,如果大于10把next设置为1,否则设置为0,。每算完一个结果,就把结果push进一个string里。最后将结果反转。
需要注意的时候,加完之后要判断一下这个进位是否归为0,因为有时会出现9999+1=10000这种情况,如果不判断话,结果就编程了0000了
具体的细节实现,见代码注释
代码
class Solution {
public:
string addStrings(string num1, string num2)
{
string ret;//返回结果字符串
int end1=num1.size()-1;
int end2=num2.size()-1;//end1和end2分别用来从后向前扫描num1和num2字符串
int next=0;//标记进位
while(end1>=0 || end2>=0)//扫描
{
int ret1=0,ret2=0;//用来接受对应单个位置的字符
if(end1>=0)
{
ret1=num1[end1--]-'0';//转换为数字
}
if(end2>=0)
{
ret2=num2[end2--]-'0';//转换为数字
}
int retch=ret1+ret2+next;//单位相加注意加进位
if(retch>=10)//如果大于10表示,下一位要进位
{
retch-=10;//留下个位数字
next=1;
}
else
{
next=0;//如果不大于10,就不仅为
}
ret+=(retch+'0');//转化为字符,并尾插到返回字符数组中
}
if(next==1)//有一种特殊情况就是9999+1,所以特殊处理
{
ret+='1';
}
reverse(ret.begin(),ret.end());//由于是尾插所以注意反转
return ret;
}
};
以上是关于字符串经典题之大数相加的主要内容,如果未能解决你的问题,请参考以下文章