菜菜刷leetcode67二进制求和

给你两个二进制字符串 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;
    }
};

       

两天一道 大四的躺平生活太快乐。。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值