原题链接
解题思路
原题说不能用加减法,所以我们第一个先想到可不可以使用位与运算。具体思路:
- 根据以前所学的知识 a xor b 即1+1 =0 0+0 = 0 1+0=1,这就是不带进位的加法运算。
- 若想将a xor b进位,即1+1 =1 0+0 = 0 1+0=0,用a & b,当然在向左移一位达到进位。
- 得到式子(a xor b)+ ((a & b) << 1),当然还有可能进位,这时候就要递归处理
- 递归到a & b == 0,完成最终运算
解题代码
public class Solution {
public int getSum(int a, int b) {
int ans = a ^ b;
int carry = (a & b) << 1;
if(carry != 0){
return getSum(ans,carry);
}else{
return ans;
}
}
}