本题一定要注意char与int之间的类型转化!!!
直接用强制类型转化,是按照ASCII表进行转换的,
因为ASCII码的数字(0)从48开始,字符‘0’对应的数字是48,所以我们在int和char之间转换可以用‘0’直接转换,转换为char转int -‘0’ ,int转char +‘0’
int a=1;
char b=2;
//强制类型转换
int c = int(b);
char d = char(a);
//转换为对应的数字用‘0’来转换
int cc = b - '0';
char dd = a + '0';
解题思路:
将字符串a和b总后往前遍历,初始化一个字符串str,定义一个int类型的变量temp用来记录进位,i和j作为字符串a和b的下标,初始化i和j的值为字符串a和b的末尾,然后通过遍历往前移,
用while循环,当a和b中有一个不为空的时候,进入循化,用n来记录字符串a中对应的值,用m来记录字符串b中对应的值,当i>=0时,n=a[i]-‘0’(注意类型转换,此时a[i]是char类型,要转为int类型,+‘0’),如果i<0,说明字符串a已经被遍历完了,n=0即可;同理得m;
定义sum=n+m+temp,向字符串中添加sum%2,然后修改进位值temp=sum/2;判断i和j是否可以继续向左移动,如果可以i--和j--;
循环结束后,判断进位值是否有值,如果有,需要向字符串str再添加进位1;
最后需要反转字符串str,因为str放入的顺序相反。
class Solution {
public:
string addBinary(string a, string b) {
int i=a.size()-1;
int j=b.size()-1;
int temp=0;//记录进位
string str;
while(i>=0||j>=0){
int n = i >= 0 ? a[i]-'0' : 0;
int m = j >= 0 ? b[j]-'0' : 0;
int sum=n+m+temp;
str.push_back(sum%2+'0');
temp=sum/2;
if(i>=0)i--;
if(j>=0)j--;
}
if(temp==1){//字符串遍历完后,进位数还有值,就要再添加字符一道字符串尾部
str.push_back('1');
}
reverse(str.begin(),str.end());//反转字符串
return str;
}
};