题目讲解
67. 二进制求和
算法讲解
为了方便计算,我们将两个字符串的长度弄成一样的,在短的字符串前面添加字符0;我们从后往前计算,当遇到当前计算出来的字符是>= '2’的,那么就需要往前面进位和求余
注意:循环遍历字符串的时候,循环的边界不能够是>=0,因为需要向前处理进位,当i ==0的时候,i - 1就越界了,所以等循环完成需要单独判断第一个位置的字符情况,需要进位的就尾插字符串即可
class Solution {
public:
string addBinary(string a, string b) {
int lena = a.size();
int lenb = b.size();
//让两个字符串一样长
if(lena < lenb)
{
while(lena < lenb)
{
a = '0' + a;
lena++;
}
}
else
{
while(lena > lenb)
{
b = '0' + b;
lenb++;
}
}
for(int i = a.size() - 1; i > 0; i--)
{
a[i] = a[i] - '0' + b[i]; //ASCLL
if(a[i] >= '2')
{
//处理进位
a[i] = (a[i] - '0') % 2 + '0'; //将计算出来的数字取ASCLL
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;
}
};