题目:
描述
中文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++写一定可以,自己再想想,就提示到着