思路
1.感觉和之前做过的二进制的相加很像(补齐高位从后往前一位一位加,单独讨论最高位),只不过这次是10进制而已。直接用二进制的方法来做,发现程序报了错。
代码:
class Solution {
public:
string addStrings(string num1, string num2) {
int num1_len=num1.size();
int num2_len=num2.size();
while(num1_len>num2_len){
num2='0'+num2;
num2_len++;
}
while(num1_len<num2_len)
{
num1='0'+num1;
num1_len++;
}
for(int i=num1_len-1;i>0;i--)
{
num1[i]=num1[i]-'0'+num2[i];
if(num1[i]>'9'){
num1[i]=num1[i]-'10'+'0';//没有‘10’这个直接对应的ASCII码
num1[i-1]++;
}
}
num1[0]=num1[0]-'0'+num2[0];
if(num1[0]>'9'){
num1='1'+num1;
num1[1]=num1[1]-'10'+'0';//没有‘10’这个直接对应的ASCII码
}
return num1;
}
};
错误
然后查找ASCII发现,这是因为单个串,没有“10”这个显示字符
修改正确的代码:
class Solution {
public:
string addStrings(string num1, string num2) {
int num1_len=num1.size();
int num2_len=num2.size();
while(num1_len>num2_len){
num2='0'+num2;
num2_len++;
}
while(num1_len<num2_len)
{
num1='0'+num1;
num1_len++;
}
for(int i=num1_len-1;i>0;i--)
{
num1[i]=num1[i]-'0'+num2[i];
if(num1[i]>'9'){
num1[i]=num1[i]-'9'-1+'0';//修改
num1[i-1]++;
}
}
num1[0]=num1[0]-'0'+num2[0];
if(num1[0]>'9'){
num1='1'+num1;
num1[1]=num1[1]-'9'-1+'0';//修改
}
return num1;
}
};
2.模拟加法器
语法
条件运算符:
max=(a>b)?a:b; 判断的条件真为a,假为b
i++,先执行再++;
++i,先++再执行