不用加减乘除做加法
剑指 Offer 65. 不用加减乘除做加法
题目
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
示例:
输入: a = 1, b = 1
输出: 2
提示:
a, b 均可能是负数或 0
结果不会溢出 32 位整数
题解
位运算
/**
* @param {number} a
* @param {number} b
* @return {number}
*/
var add = function(a, b) {
// sum = a + b
// = n + c
// n为无进位和: a ^ b
// c为进位和: (a & b)<<1
// 直至c为0时 sum = n
let n = a^b,
c = (a&b)<<1;
while(c){
const _n = n,_c = c;
n ^= c;
c = (_n & _c)<<1;
}
return n
};
1. ^ 不进位的加法
2. & 判断进位点
3. << 1 进位
function Add(num1, num2)
{
return num2 ? Add(num1 ^ num2,(num1 & num2) << 1) : num1;
}
最后更新于
这有帮助吗?