Skip to content

Latest commit

 

History

History
82 lines (67 loc) · 1.82 KB

File metadata and controls

82 lines (67 loc) · 1.82 KB

题目描述

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

示例:

输入: a = 1, b = 1
输出: 2

提示:

  • ab 均可能是负数或 0
  • 结果不会溢出 32 位整数

解法

  • 对两数进行按位 ^ 异或运算,得到不进位的和;
  • 对两数进行按位 & 与运算,然后左移一位,得到进位;
  • 循环,直至进位为 0。

Python3

由于 python int 是无限长整型,左移不会自动溢出,因此需要特殊处理。

class Solution:
    def add(self, a: int, b: int) -> int:
        a, b = a & 0xffffffff, b & 0xffffffff
        s = carry = 0
        while b:
            s = a ^ b
            carry = ((a & b) << 1) & 0xffffffff
            a, b = s, carry
        return a if a < 0x80000000 else ~(a ^ 0xffffffff)

Java

class Solution {
    public int add(int a, int b) {
        int sum = 0, carry = 0;
        while (b != 0) {
            sum = a ^ b;
            carry = (a & b) << 1;
            a = sum;
            b = carry;
        }
        return a;
    }
}

JavaScript

/**
 * @param {number} a
 * @param {number} b
 * @return {number}
 */
var add = function(a, b) {
    if(a === 0) return b
    return add((a&b) << 1, a^b)
};
// (a & b) << 1 是 进位和
// a ^ b 是不进位和
// 两者相加得结果,由于本题禁止 + 号,所以递归

...