美文网首页
A+B的问题

A+B的问题

作者: myjourney | 来源:发表于2018-08-21 10:33 被阅读59次

    一.问题描述:给出两个整数a和b,求他们的和

    二.问题说明

    a和b都是 32位 整数么?

    是的

    我可以使用位运算符么?

    当然可以

    样例

    如果 a=1 并且 b=2,返回3。

    挑战

    显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?(不使用++等算数运算符)

    三.思路:

    和sum其实就是x XOR y的结果。而进位carry恰好是x AND y的结果

    1.通过对x和y进行&位运算,得出每一位上的进位。

    2.对x和y进行^位运算,得出没有加进位的和。

    3.将所得的和当做新的x,所得的进位往左移一位(第零位的进位输入为0)当做新的y,继续做上面的步骤,直到进位为0。

    此时x中保存的就是x和y的和了。

    但是要注意:若a+b正好为0,用位运算就陷入循环...

    四.参考:

    def aplusbt(a, b):

        if a == 0:

            return b

        if b == 0:

            return a

        if a+b == 0:

            return 0

        while (b != 0):

            _a= a ^ b

            _b= (a & b)<< 1

            a= _a

    b= _b

    return a

    相关文章

      网友评论

          本文标题:A+B的问题

          本文链接:https://www.haomeiwen.com/subject/mlsdiftx.html