lintcode 1. a+b (不用使用加号,位运算)

题目:

描述

中文English

给出两个整数 aa 和 bb , 求他们的和。

 

你不需要从输入流读入数据,只需要根据aplusb的两个参数a和b,计算他们的和并返回就行。

您在真实的面试中是否遇到过这个题?  是

题目纠错

说明

a和b都是 32位 整数么?

  • 是的

我可以使用位运算符么?

  • 当然可以

样例

样例  1:
	输入:  a = 1, b = 2
	输出: 3
	
	样例解释: 
	返回a+b的结果.

样例 2:
	输入:  a = -1, b = 1
	输出: 0
	
	样例解释: 
	返回a+b的结果.

 思路:可见 a+b,不能用+号

方法1:在这首先有两个小知识

a^b  是a+b的不进位加法得出的数

(a&b)<< 1 是 a+b只算进位得出的数

 a  b  可以 转为 这个两个数,看看那个数为0了,那么得数就是 另一个数了

代码:

class Solution:
   def aplusb(self,a,b):
        if a == -b:
            return 0
        if a == 0:
            return b
        if b == 0:
            return a
        return  self.aplusb(a^b,(a&b)<<1)
#a,b = map(int ,input().split())
#tt = Solution();
#print (tt.aplusb(a,b))

方法2: 可以看看a和b的二进制位同一位上是不是1,判断进不进位,来进行二进制加法运算,进行加法运算时,可以用 | 符号和左移符号,来进行,但是用python写,好像不对,用c++写一定可以,自己再想想,就提示到着

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值