不利用加减法实现两个数相加
和题目一样,我用的是一个位运算,分为两个步骤:
1、输入 a,b
2、按照位把ab相加,不考虑进位,结果是 a xor b,即1+1 =0 0+0 = 0 1+0=1,进位的请看下面
3、计算ab的进位的话,只有二者同为1才进位,因此进位可以标示为 (a and b) << 1 ,注意因为是进位,所以需要向左移动1位
将 sum赋值给a,并将进位值相加,知道b为零时一定不产生进位,返回值sum。
代码如下:
class Solution {
public int getSum(int a, int b) {
if(b==0)
return a;
int sum = 0;
while(b!=0){
sum = a^b;
b = (a&b)<<1;
a = sum;
}
return sum;
}
}