剑指offer第二版(Python3)--面试题65 : 不用加减乘除做加法

第2章 面试需要的基础知识

第3章 高质量的代码

第4章 解决面试题的思路

第5章 优化时间和空间效率

第6章 面试中的各项能力

  面试题62 : 圆圈中最后剩下的数字

  面试题64 : 求1+2+3+…+n

  面试题65 : 不用加减乘除做加法

第7章 两个面试案例


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

解题思路

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

实战
  特别要注意对负数的处理

class Solution:
    def Add(self, num1, num2):
        # write code here
        if num1 is None or num2 is None:
            return None
        while num2:
            sums = (num1 ^ num2) & 0xffffffff
            carry = ((num1 & num2) << 1) & 0xffffffff
            num1 = sums
            num2 = carry
        return num1 if num1 <= 0x7fffffff else ~(num1^0xffffffff)

你可能感兴趣的:(算法设计)