[剑指Offer-65][简单] 不用加减乘除做加法
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
示例:
输入: a = 1, b = 1
输出: 2
提示:
a, b 均可能是负数或 0
结果不会溢出 32 位整数
解题思路
对于两个数字a
和b
, 有:
a^b
: 每位的异或运算, 得到的结果为无进位相加的结果a&b
: 每位的与运算, 得到的结果为进位结果
因此将这a^b
与a&b
左移一位相加, 得到的仍然是a+b
. 左移一位的目的是实现进位.
按照这个思路, 循环求和, 当进位为0时, 对应的就是最终的加和结果.
Python中对于负数位的处理参考: 面试题65. 不用加减乘除做加法(位运算,清晰图解).
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)
最后更新于
这有帮助吗?