社团活动每日一题:第十二天 二进制求和

前言:这是我们大学社团给我们大一新生布置的每日一题任务,因为本人编程理解有限,参考价值较低。

题目链接icon-default.png?t=LA23https://leetcode-cn.com/classic/problems/add-binary/description/        二进制求和,考察字符串应用,可以乘此学一波位运算。

位运算:
    &且    1&1 == 1,其余为0
    |或    0|0 == 0,其余为1
    ^异或  1^0 == 0^1 == 1 , 0^0 == 1^1 == 0
    ~取反(基本不用) ~1011101== 0100010
    !否    这个不用解释了吧

        然后依次计算就可以了,不要忘记进位就好,下面是AC代码:

class Solution {
public:
    void turn(string& s){       //将字符串倒置,以便按位运算
        string t;
        for(int i=int(s.size())-1;i>=0;i--){
            t += s[i];
        }
        s = t;
    }
    string addBinary(string a, string b) {
        int l1 = a.size() , l2 = b.size() , m = max(l1,l2);
        string ans;
        bool bo=false;          //bo用于判断进位
        turn(a);
        turn(b);
        for(int i=0;i<m;i++){
            int t = bo + (l1<i ? 0:a[i]-'0') + (l2<i ? 0:b[i]-'0');
            bo = t&(1<<1);      //1<<1就是2^1==2==10(2)
            ans += t&1 ? '1':'0';
        }
        if(bo)ans += '1';       //如果最后一位能进位就加上
        turn(ans);
        return ans;
    }
};

在做完这道题之后,我们就可以了解一下高精度算法了,思路是一样的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值