python不用加减乘除做加法

这道题的思路很简单:

  1. 相加各位的值,不算进位。a^b

  2. 计算进位值。(a & b) << 1


class Solution:
   def Add(self, num1, num2):
       # write code here
       while num2:

           sum = num1 ^ num2

           temp = num1 & num2
           print('temp:',temp)
           carray = (num1 & num2) << 1
           num1 = sum
           num2 = carray
       return num1


这道题使用python按照上述思路写会出现问题,python没有大数溢出,所以一个正数和负数的话,会不断变大变大,num2不会变为0.

解决办法还是用c++写吧。

当然有其他办法,一种是使用ctypes

def add(a, b):
    
    # :type a: int
    # :type b: int
    # :rtype: int
    import ctypes
    a = ctypes.c_int32(a).value
    b = ctypes.c_int32(b).value
    while b != 0:
        carry = ctypes.c_int32(a & b).value
        a = ctypes.c_int32(a ^ b).value
        b = ctypes.c_int32(carry << 1).value

    return a

另一种参考https://blog.csdn.net/u014763918/article/details/79573448

class Solution:
    def Add(self, num1, num2):
        # write code here
        while num2:

            sum = num1 ^ num2
            carry = 0xFFFFFFFF & ((num1 & num2) << 1)
            if carry > 0x7FFFFFFF:
                carry = -(~(carry-1) & 0xFFFFFFFF)
            num1 = sum
            num2 = carry
        return num1


评论

Live Sex Cams Free