题目:要求不使用运算符完成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;
}
};
本文介绍了一种不使用常规加法运算符实现两个整数相加的方法。通过运用位操作,包括异或和与操作,来实现无进位加法及进位计算,并通过递归或循环的方式直到没有进位发生。
1482

被折叠的 条评论
为什么被折叠?



