剑指offer-python

不用加减乘除做加法 python

2018-08-29  本文已影响0人  小歪与大白兔

题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路:不用四则运算,那就只能用位运算了。

  1. 首先是各个对应位相加,不进位
  2. 计算各个位的进位
  3. 然后重复计算前两部得到的结果,直达没有进位产生
  1. 不考虑进位,对每一位相加(相当于二进制的异或)。0加0、1加1都是0;0加1、1加0都是1.
    2.进位,0加0 、0加1、1加0都不会产生进位,只有1加1会产生进位,所以相当于二进制下的与运算,然后在左移一位。(1加1:与运算得到1,在左移一位得到10)
  2. 把前两步的结果相加,该相加的过程依然是重复前面两步,直到不产生进位为止。
# -*- coding:utf-8 -*-
class Solution:
    def Add(self, num1, num2):
        # write code here
        while num2:
            sum = num1 ^ num2
            carry = 0xFFFFFFFF&(num1 & num2)<<1
            carry = -(~(carry - 1) & 0xFFFFFFFF) if carry > 0x7FFFFFFF else carry
            num1 = sum
            num2 = carry
        return num1

s = Solution()
print s.Add(-1,2)
上一篇 下一篇

猜你喜欢

热点阅读