给你两个数,a和b,求这两个整数的和。但是在程序中不能使用" + "和" - "号
例如:给你a =1, b = 2 返回 3
对于这个问题,想吐槽的很多:
1.python弱类型的缺点。这个问题以代码的思路解没有问题。C,JAVA,Scala都测试没问题。然而,用python测试的时候会在整数和负数相加
的时候出现问题。
2.就是python二进制的转换,bin(-3)将a,转换成二进制数为(-0b11)..。而实际应该为”111111......1111101“.。
不知道是上面的那个问题。反正测试 - 5 + 3 = -2没问题。但是测试 -5 + 5 就会死循环。正负数,如果整数的绝对值比负数的绝对值大,就测试失败
其他情况都没问题。这是python的吐槽,别着急,下面还有对题的吐槽呢
题意要求,不让用’ +‘ 和’-” 。但是你就是用了,也能通过。
下面对思路简单说下:
将一个整数用二进制表示,其加法运算就是:相异(^)时,本位为1,进位为0;同为1时本位为0,进位为1;同为0时,本位进位均为0.
所以,不计进位的和为sum = a^b,进位就是arr = a&b,(与sum相加时先左移一位,因为这是进位)。完成加法直到进位为0.
class Solution(object):
def getSum(self, a, b):
if b == 0 :
return a
numYH = a^b
numAnd = (a & b) << 1
return getSum(numYH,numAnd)