【剑指offer】048-不用加减乘除做加法

题目

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

思路

两数相加,不使用四则运算,就只能使用位运算。包括两部分,两数直接相加的部分,和两数相加后的进位部分
两数按位异或:得到直接相加部分,不包括相加后需要进位的部分
两数按位相与:相与可以得到两数都为1的位数,向左移动一位,就是两数相加进位后的大小

将两部分相加,仍然可能发生进位,所以需要循环上述操作

代码

1
2
3
4
5
6
7
8
9
function Add (num1, num2{
  // write code here
  while (num2 !== 0) {
    let temp = num1 ^ num2
    num2 = (num1 & num2) << 1
    num1 = temp
  }
  return num1
}
文章作者: ptp
文章链接: https://youyingjie114.github.io/2019/11/07/jz-offer/jz-offer-048/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 PTP'S BLOG