1.二进制求和
class Solution {
public:
string addBinary(string a, string b) {
string res="";
int m = a.size()-1,n = b.size()-1,carry=0;
while(m >= 0 || n>= 0)
{
int p = m>=0 ? a[m--]-'0':0;
int q = n>=0 ? b[n--]-'0':0;
int sum = p+q+carry;
res = to_string(sum%2) + res;
carry = sum/2;
}
return carry == 1?"1"+res:res;
}
};
在看代码时出现疑惑:为什么用字符串的某位数字减去‘0’就能得到该整数呢?
下面就说说为什么字符减'0'可以到相应的整数。现在比如我们要字符‘1’转换成数字1,就这么一个变化,我们看到了大家注意了字符型常量用''括起来的原因是,它们在计算机中都以各自的ASCII表示。而‘1’的对应编码是49的二进制码,但是我们的数字1,就等于1呀,所以为了由原来的‘1’实际上就是49的二进制变成现在的1对应的二进制1,只好用49-48=1了。但是在ASCII码里‘0’对应的刚好是48的二进制码,所以我们转换的时候只需要‘1’-‘0’=1;就可以了。而数字的ASCII码是按顺序规定的。所以其它字符要转换成数字都可以用减‘0’来表示。比如‘2’的ASCII是50,而我们要得到数字2,于是用‘2’-48=2了。看来当我们知道数据在计算机中的存储规则的时候,问题就迎刃而解了。
总之一句话:因为ASCII字符中的数字(‘123456’)想转换为纯数字(1,2,3,4...)就要减去48(ASCII单位),而‘0’的ASCII单位正好等于48。