不使用运算符 +
和 -
,计算两整数 a
、b
之和。
示例 1:
输入: a = 1, b = 2
输出: 3
示例 2:
输入: a = -2, b = 3
输出: 1
方法一:递归
public static int getSum1(int a, int b) {
if ((a & b) != 0) { // 判断是否有进位
return getSum1(a ^ b, (a & b) << 1); // 不进位和进位相加
} else {
return a | b; // 不进位方式相加(此处返回a ^ b亦可)
}
}
方法二:迭代
public static int getSum2(int a, int b) {
while (a != 0) {
int forward = (a & b) << 1; // 进位
b = a ^ b; // 不进位求和
a = forward; // 保存进位用于下次运算
}
return b;
}