371. 两整数之和
题目
不使用运算符+ 和-,计算两整数a、b之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
思路
从上面的表格就可以发现,低位 = a^b,进位 = a & b。这样的计算可能要持续多次,回想一下在十进制的计算中,如果进位一直大于0,就得往后面进行计算,在这里也是一
样,只要进位不是0,我们就得一直重复计算低位和进位的操作(需要在下一次计算之前要把进位向左移动一位,这样进位才能和更高位进行运算)。这个时候的a和b就是刚才计算的低位和进位,用简单的加法迭代的代码表示:
代码
class Solution {
public int getSum(int a, int b) {
if (a==0) return b;
if (b==0) return a;
int lower;
int carrier;
while (true) {
lower = a^b; // 计算低位
carrier = a&b; // 计算进位
if (carrier==0) break;
a = lower;
b = carrier<<1;
}
return lower;
}
}
网友评论