// 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
// 按位异或 每一位都不同,结果才为 1
// 8 ^ 7 // -> 15
// 8 ^ 8 // -> 0
// 1000 ^ 0111 -> 1111 -> 15
// 1000 ^ 1000 -> 0000 -> 0
// 这道题中可以按位异或,因为按位异或就是不进位加法,
// 8 ^ 8 = 0 如果进位了,就是 16 了,
// 所以我们只需要将两个数进行异或操作,然后进位。
// 那么也就是说两个二进制都是 1 的位置,
// 左边应该有一个进位 1,
// 所以可以得出以下公式 a + b = (a ^ b) + ((a & b) << 1) ,
// 然后通过迭代的方式模拟加法
function Add(num1, num2) {
if (num1 == 0) return num2
if (num2 == 0) return num1
let newA = num1 ^ num2
let newB = (num1 & num2) << 1
return Add(newA, newB)
}
两个数不使用四则运算得出和
最新推荐文章于 2023-06-25 22:00:00 发布