给你两个二进制字符串 a
和 b
,以二进制字符串的形式返回它们的和。
思路:
相加前首先要将两个数长度一致,否则会出现数组溢出。while循环在短数组前加0即可。
b为字符串 加0为b='0'+b
长度一致后,按位相加。若此位加的和≥1,则需进位,此位对2取余,前一位加一。。
首位时需单独考虑,因为涉及到进位的问题。
计算进位时需注意 a[i]=a[i]-'0'+b[i];
字符的运算,实际上是对应的ASCII数字加减‘1’+‘0’=字符‘1’对应的十进制数字49+ 字符‘0’对应的十进制数字48 = 97。如果就是这样,那么结果为十进制97对应的ASCII字符,是‘a’。所以再减去‘0’,得到的是49,即为所需要的字符‘1’
判断的时候也是 a[i]>='2' 而不是2(第一次就进了坑想了好久才发现错这了)
ok代码段段
class Solution {
public:
string addBinary(string a, string b) {
int al=a.size();
int bl=b.size();
while(al>bl)
{
b='0'+b;
bl++;
}
while(al<bl)
{
a='0'+a;
al++;
}
for(int i=al-1;i>0;i--)
{
a[i]=a[i]-'0'+b[i];
if(a[i]>='2')//'2'
{
a[i]=(a[i]-'0')%2+'0';
a[i-1]++;
}
}
a[0]=a[0]+b[0]-'0';
if(a[0]>='2')
{
a[0]=(a[0]-'0')%2+'0';
a='1'+a;
}
return a;
}
};
两天一道 大四的躺平生活太快乐。。