原题入口
描述
给出两个整数 aa 和 bb , 求他们的和并以整数(int)的形式返回。
你不需要从标准输入流读入数据,只需要根据aplusb传入的两个参数 a 和 b,计算他们的和并返回就行。
-2^{31} \leq a, b \leq 2^{31} - 1−2
31
≤a,b≤2
31
−1
-2^{31} \leq a + b \leq 2^{31} - 1−2
31
≤a+b≤2
31
−1
样例
样例 1:
输入:
a = 1
b = 2
输出:
3
解释:
a + b = 1 + 2 = 3
样例 2:
输入:
a = -1
b = 1
输出:
0
解释:
a + b = -1 + 1 = 0
挑战
显然你可以直接返回 a + b,但是你是否可以挑战不这样做?(不使用+等算数运算符)
export class Solution {
/**
* aplusb
*
* @param a: An integer
* @param b: An integer
* @return: The sum of a and b
*/
aplusb(a, b) {
// write your code here
let [_a, _b] = [0, 0];
while (b != 0) {//可以看下js的位运算,就好理解了
_a = a ^ b;//ab相加后该进位的地方不进位
_b = (a & b) << 1;//ab相加进位后的结果
a = _a;
b = _b;
}
return a;
}
}