67. 二进制求和

67. 二进制求和
位运算, 这种题之前没写过

class Solution {
public:
    string addBinary(string a, string b) {
        //补齐
        int abs = a.size()-b.size();
        //b 前面补abs个0 或者补a
        if(abs>0)  b.insert(b.begin(),abs,'0');
        else if(abs<0)  a.insert(a.begin(),-abs,'0');
        string res(a.size(),'0');
        //运算
        for(int i = a.size()-1;i>0;i--)
        {
            int stat = 0;
            //看有几个'1'
            stat = a[i]+b[i]+res[i]-'0'-'0'-'0';
            //本位
            res[i] = stat%2==0?'0':'1';
            ///看是否进位
            if(stat>1)  res[i-1] = '1';
        }
        //看第一位
        int stat1 = 0;
        stat1 = stat1+a[0]+b[0]+res[0]-'0'-'0'-'0';
        res[0] = stat1%2==0?'0':'1';
        if(stat1>1)  res.insert(res.begin(),'1');
        return res;
    }
};
posted @ 2023-05-07 21:33  无形深空  阅读(8)  评论(0编辑  收藏  举报