python的算术运算符不包括_没有算术运算符的A + B,Python与C ++

我试图解决一个老问题:

编写一个将两个[整数]数字A和B相加的函数。不应使用+或任何算术运算符。

对于任意底数的a + b,我们可以将加号视为两个部分:1. a + b,不带进位;2. + b产生的进位。然后,a +

b等于第1部分加第2部分。如果part1 + part2产生更多进位,则可以重复此过程,直到没有进位。

我可以理解该算法,而且一切看起来都不错,因此我在lintcode上使用下面粘贴的代码对其进行了测试。

class Solution:

"""

@param a: The first integer

@param b: The second integer

@return: The sum of a and b

"""

def aplusb(self, a, b):

while b != 0:

carry = a & b

a = a ^ b

b = carry << 1

return a

但是令人惊讶的是,它给了我Time Limit Exceeded测试用例错误[100, -100]。所以我在本地运行它,并为每个循环打印a,b:

(-8, 8)

(-16, 16)

(-32, 32)

(-64, 64)

(-128, 128)

(-256, 256)

(-512, 512)

(-1024, 1024)

(-2048, 2048)

(-4096, 4096)

(-8192, 8192)

(-16384, 16384)

(-32768, 32768)

(-65536, 65536)

(-131072, 131072)

...

计算是正确的,所以我认为该算法不适用于此类输入,但是当我用C ++编写相同的算法时,它就可以正常工作:

class Solution {

public:

int aplusb(int a, int b) {

while (b!=0){

int carry = a & b;

a = a^b;

b = carry << 1;

}

return a;

}

};

我不知道应该问什么,基本上这些问题是:

为什么C ++给出正确的输出0而Python没有给出正确的输出?

如果使用Python,如何修改此算法以使其起作用?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值