剑指offer - 不用加减乘除做加法 - python

49 阅读1分钟

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

思路:

  • 相加各位的值,不算进位,二进制每位相加就相当于各位做异或操作;
  • 计算进位值,相当于各位做与操作,再向左移一位。
  • 重复上述两步, 各位相加 ,计算进位值。进位值为0,跳出循环

AC code

class Solution: 
    def Add(self, num1, num2):
        # write code here
        if num1 is None or num2 is None:
            return -1

        while num2 != 0:
            sums = num1 ^ num2
            num2 = (num1&num2)<<1 # 进位
            num1 = sums & 0xFFFFFFFF # 考虑负数
        return num1 if num1 >> 31 == 0 else num1 - 4294967296