该题思路上很容易,不过实现上我还是有些小问题
我的思路很正常,就是模拟二进制的加法
但是为了两个字符串能够一一对应,我们需要先对它们进行一些基础的处理
- 我们要先对其进行补零,对于那个比较短的字符串,我们在它的前面补零,直到两个字符串等长
- 其次,我们就是模拟这个加法的过程了,我们对于每个数字,我们直接将其相加到a字符串上(记得先 - ‘0’ (ASCII码转换)),可以省去一些空间,然后判断是不是需要进一位,如果需要我们就对其取模,然后对下一个位置+1处理即可
- 最后收尾环节单独处理,因为我们无法确定是不是需要进一位(操作同上)
接下来看代码吧
string addBinary(string a, string b) {
int lena = a.size();
int lenb = b.size();
int sum;
while (lena < lenb)//补零
{
a = '0'+ a;
lena++;
}
while (lenb < lena)//补零
{
b = '0' + b;
lenb++;
}
for (int i = a.size() - 1; i > 0; i--)//模拟
{
a[i] = (a[i] - '0') + b[i];
if (a[i]>='2')
{
a[i] = ((a[i] - '0') % 2 )+ '0';
a[i - 1] = a[i - 1] + 1;
}
}
a[0] = (a[0] - '0') + b[0];
if (a[0] >= '2')
{
a[0] = ((a[0] - '0') % 2) + '0';
a = '1' + a;
}
return a;
}
这里有个string容器的小技巧————如果我们要拼接字符串(相当于这道题的补位操作),我们这样a=a+'0' 这样是在a字符串末尾补0
而这样a='0' +a 这样是在a字符串开头补零