Lintcode:A + B 问题

来源:互联网 发布:java图书销售管理系统 编辑:程序博客网 时间:2024/05/17 08:07

给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。

a和b都是 32位 整数么?

  • 是的

我可以使用位运算符么?

  • 当然可以
样例

如果 a=1 并且 b=2,返回3



python:

class Solution:    """    @param: a: An integer    @param: b: An integer    @return: The sum of a and b    """    def aplusb(self, a, b):        # write your code here        sum = 0         carry = 0        for i in range(32):            a1 = a & 1            b1 = b & 1            val = 0            if a1== 0 and b1 ==0 and carry ==0:                val =0                carry = 0            elif a1 == 1 and b1 == 1 and carry ==1:                val =1                 carry =1            elif a1 == 0 and b1 ==0 or a1==0 and carry ==0 or b1 ==0 and carry ==0:                val = 1                carry = 0            else:                val = 0                carry = 1            val = val << i            sum = sum|val            a = a>>1            b = b>>1        return sum


C++:

class Solution {public:    /*     * @param : An integer     * @param : An integer     * @return: The sum of a and b     */    int aplusb(int a, int b) {        // write your code here        if(a==0)            return b;          if(b==0)            return a;          int x1 = a ^ b;          int x2 = (a & b) << 1;          return aplusb(x1, x2);    }};



原创粉丝点击