题目描述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
}
1 回答
宝慕林4294392
1.计算
TA贡献2021条经验 获得超8个赞
1.计算a^b
(以+5、-5为例
)
而a
和-a
进行异或操作
得到1111 1110
也就是-2
计算过程:
以5
(0000 0101)和-5
(1111 1011)为例
异或运算得到1111 1110
1111 1110
减去1
得到1111 1101
1111 1101
取反码0000 0010
得到2
2
再加上原来的负号
就是-2
添加回答
举报
0/150
提交
取消