目录

text

给出两个整数 a 和 b , 求他们的和。

  1. class Solution:
  2. """
  3. @param a: The first integer
  4. @param b: The second integer
  5. @return: The sum of a and b
  6. """
  7. def aplusb(self, a, b):
  8. # write your code here, try to do it without arithmetic operators.
  9. carry = -1
  10. while carry != 0:
  11. s = a ^ b
  12. carry = (a & b) << 1
  13. a = s
  14. b = carry
  15. return a
  16. s = Solution()
  17. print(s.aplusb(40, 13)) # 53

题解:

主要利用异或运算来完成

异或运算有一个别名叫做:不进位加法

那么a ^ b就是a和b相加之后,该进位的地方不进位的结果

然后下面考虑哪些地方要进位,自然是a和b里都是1的地方

a & b就是a和b里都是1的那些位置,a & b << 1 就是进位

之后的结果。所以:a + b = (a ^ b) + (a & b << 1)

令a’ = a ^ b, b’ = (a & b) << 1

可以知道,这个过程是在模拟加法的运算过程,进位不可能

一直持续,所以b最终会变为0。因此重复做上述操作就可以

百度