题目:要求不使用运算符完成a+b操作
分析:
1. 不带进位加法,int sum = a ^ b;
2. 计算进位,int carry = (a & b) << 1;
3. 加上进位,sum + carry。这样,又回到1、2步的操作。很明显,退出循环的条件是:进位为0;
递归解法
public class Solution {
/*
* @param : An integer
* @param : An integer
* @return: The sum of a and b
*/
public int aplusb(int a, int b) {
// write your code here
int sum = a ^ b;
int carry = (a & b) << 1; // 注意加上括号
if (carry != 0)
return aplusb(sum, carry);
else
return sum;
}
};
循环解法
public class Solution {
/*
* @param : An integer
* @param : An integer
* @return: The sum of a and b
*/
public int aplusb(int a, int b) {
// write your code here
while (b != 0) {
int sum = a ^ b;
int carry = (a & b) << 1;
a = sum;
b = carry;
}
return a;
}
};