美文网首页剑指offer-python
不用加减乘除做加法 python

不用加减乘除做加法 python

作者: 小歪与大白兔 | 来源:发表于2018-08-29 13:57 被阅读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)
    

    相关文章

      网友评论

        本文标题:不用加减乘除做加法 python

        本文链接:https://www.haomeiwen.com/subject/mjnhwftx.html