‘123’+‘23’ = ?
我相信大家都会算的出来,那我们如何用代码去分析呢?
我们要从后面加:‘123’个位是3
Step 1:要将字符转换成数字(数字字符 - ‘0’=所对应的数字,2asscll对应的为50,0对应为48;example:‘2’-‘0’ = 2)
Step2 : 要对进制进行处理(要创建一个变量去存储)
Step3: 要将最后的相加的结果转换
下面代码我已经标好解释
class Solution {
public:
string addStrings(string num1, string num2)
{
int end1 =num1.size()-1;//控制计算的次数
int end2 =num2.size()-1;
int next =0;//进制
int val1,val2,sum;//val1和val2是用来分别存放两个string转换数字的,sum是用来位的进制相加的(val1+val2+上一位留下的进制)
string s ="";
while(end1>=0||end2>=0)//因为数组有长有短所以要限制如果有一个string还存在就还没结束
{
if(end1>=0)
{
val1 = num1[end1]-'0';//转换
end1--;
}
else
{
val1=0;//当val1运行完了应该将val1变成0,防止参与到下面的运算
}
if(end2>=0)
{
val2=num2[end2]-'0';//转换
end2--;
}
else
{
val2=0;//同理
}
sum=val1+val2+next;//相加
if(sum>9)
{
next =sum/10;//保持进制
sum -=10;//去除进制
}
else
{
next=0;
}
s +=(sum+'0');//这里+=是尾增,所以是反的,也可以用insert(s.begin(),sum+'0')头插就不会了
}
if(next==1)
{
s +='1';
}
reverse(s.begin(),s.end());//反转
return s;
}
};
成字符串