猿问

python 解决lintcode a+b 超时问题

题目描述

lintcode a+b 问题

题目来源及自己的思路

https://www.lintcode.com/prob...

代码

def aplusb(self, a, b):
    # write your code here
    while True:
        a, b = a^b, (a&b)<<1
        if a==0 or b == 0:            return a or b

当 a=-b 时 为什么代码会超时, 而同样的逻辑,用Java就不会超时

  public int aplusb(int a ,int b) {        // write your code here, try to do it without arithmetic operators.
        while(true){        int x = a^b;  //记录不进位数
        int y = (a&b)<<1;  //记录进位数
        if(x==0){            return y;
        }        if (y==0){            return x;
        }
        a=x;
        b=y;
        } // while
            
        }


偶然的你
浏览 536回答 1
1回答

宝慕林4294392

1.计算a^b(以+5、-5为例)而a和-a进行异或操作得到1111 1110也就是-2计算过程:以5(0000 0101)和-5(1111 1011)为例异或运算得到1111 11101111 1110&nbsp;减去&nbsp;1&nbsp;得到&nbsp;1111 11011111 1101&nbsp;取反码&nbsp;0000 0010&nbsp;得到&nbsp;22再加上原来的负号&nbsp;就是&nbsp;-2
随时随地看视频慕课网APP

相关分类

Python
我要回答