用python做加法_python不用加减乘除做加法

这道题的思路很简单:相加各位的值,不算进位。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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值