1 题目
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
示例:
输入: a = 1, b = 1
输出: 2
提示:
a, b 均可能是负数或 0
结果不会溢出 32 位整数
2 Java
2.1 方法一(位运算)
a + b 等价于 (a ^ b) + ((a & b) << 1)
前者“无进位和”,后者“进位和”
由于不能用加号,所以会不断迭代,让a等于前一部分,b等于后一部分,直至b==0,即不需要进位
class Solution {
public int add(int a, int b) {
// a + b = (a ^ b) + ((a & b) << 1);前者“无进位和”,后者“进位和”
// 当 b 即 “进位和” = 0,直接输出 a 即可
// 注:a 是“无进位和”,是不可能为0的,必须以b为出口条件
while(b != 0){
int temp = a;
a = a ^ b;
b = (temp & b) << 1;
}
return a;
}
}