面试题 17.01. 不用加号的加法

题目

设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。

示例1:

1
2
输入: a = 1, b = 1
输出: 2

提示:

  • a, b 均可能是负数或 0
  • 结果不会溢出 32 位整数

解法

解法一:

Java

1
2
3
4
5
6
7
8
9
10
public static int add(int a, int b) {
int sum = 0, carry = 0;
while(b != 0) {
sum = a ^ b; // 异或计算未进位的部分
carry = (a & b) << 1; // 进位部分
a = sum; // 保存未进位部分,再次计算
b = carry; // 保存进位部分,再次计算
}
return a; // 最后无进位,异或的结果即加法结果
}
0%