这道题的思路很简单:相加各位的值,不算进位。a^b
计算进位值。(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++写吧。
当然有其他办法,一种是使用ctypesdef 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 <
return a
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