371.Sum of Two Integers

给你两个数,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.

  x ^ y :实现不进位的加法,那么我们接下来就要将进位的数据加上,就可以实现了。
  x & y : 这个操作,即是找出相同位,为什么我们需要找出相同的位呢,因为只 1 & 1 ,这种情况才会*  *  产生进位,可能有人会想那 0 & 0 呢,这个没有影响的吧。
  (x & y) << 1:为什么要左移呢,其实也很简单,即然后我们都已经找出需要进位的位,那么说明在该位  *  置的前面一位,应该加上1,对吧,所以应该左移1位,就加上余数


class Solution(object):
    def getSum(self, a, b):
        if b == 0 :
        return a
        numYH = a^b
        numAnd = (a & b) << 1   
        return getSum(numYH,numAnd)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值