最后更新于4年前
这有帮助吗?
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
示例:
输入: a = 1, b = 1 输出: 2
提示:
a, b 均可能是负数或 0
结果不会溢出 32 位整数
对于两个数字a和b, 有:
a
b
a^b: 每位的异或运算, 得到的结果为无进位相加的结果
a^b
a&b: 每位的与运算, 得到的结果为进位结果
a&b
因此将这a^b与a&b左移一位相加, 得到的仍然是a+b. 左移一位的目的是实现进位.
a+b
按照s=a+b⇒s=n+cs = a + b \Rightarrow s = n + cs=a+b⇒s=n+c这个思路, 循环求nnn和ccc, 当进位ccc为0时, 对应的nnn就是最终的加和结果.
Python中对于负数位的处理参考: .
class Solution: def add(self, a: int, b: int) -> int: x = 0xffffffff a, b = a & x, b & x while b != 0: a, b = a ^ b, (a & b) << 1 & x return a if a <= 0x7fffffff else ~(a ^ x)