当前位置: 代码迷 >> 综合 >> (lintcode): A + B 问题 python解法
  详细解决方案

(lintcode): A + B 问题 python解法

热度:53   发布时间:2023-11-21 20:39:39.0

1. A + B 问题

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

解法一:直接return a+b

class Solution:def aplusb(self, a, b):return a + b

解法二: 位运算

class Solution:def aplusb(self, a, b):if a == 0:  #不再进位return bif b == 0:  #直到没有需要进位的时候返回return aif a == -b:return 0m = a^b   #异或运算得到不需进位的数n = (a&b) << 1   #先与运算,再左移一位得到需要进位的数return self.aplusb(m,n)  #递归方法,将需要进位的数与不需进位的数相加,不断重复上述步骤,直至不再产生进位

先介绍一下位运算运算符:与(&):0&0=0,0&1=0,1&0=0,1&1=1;

                                            或(|) :0&0=0,0&1=1,1&0=1,1&1=1;

                                            非(~):~0=1,~1=0;

                                            异或(^):0&0=0,0&1=1,1&0=1,1&1=0;

左位移:左位移一位(a<<1)若a = 2,0010 左移一位得0100, 即a<<1为4

              左位移一位相当于乘以2的一次方,左移n位,相当于乘以2的n次方

同理:右位移n(a>>n)位相当于除以2的n次方,这里取商

2+3 = 5  相当于二进制010(2) + 011(3) 应得 101(5)

计算步骤:

              010+011:010 ^ 011 = 001 ;010 & 011 = 010 ;001<<1=100;

              001+100:001 ^ 100 = 101 ;001 & 100 = 000;000<<1=000;

              101+000:b=0,return a    101即结果5

 

  相关解决方案