LintCode A+B问题

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

说明

a和b都是 32位 整数么?

  • 是的

我可以使用位运算符么?

  • 当然可以
样例

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

 

1.(忽略进位):0+0=0,0+1=1,1+0=1,1+1=0,异或运算。
2.1+1会向前产生进位1,相对于这一数位的进位值为10,而10=(1&1)<<1。
3.将第1步和第2步得到的结果相加,其实又是在重复这2步,直到不再产生进位为止。

class Solution {
public:
    /*
     * @param a: The first integer
     * @param b: The second integer
     * @return: The sum of a and b
     */
    int aplusb(int a, int b) {
        // write your code here, try to do it without arithmetic operators.
        if(a==0)
         return b;
        if(b==0)
         return a;
         int _a=a^b;
         int _b=(a&b)<<1;
         return aplusb(_a,_b);
    }
};

  

posted @ 2016-11-23 15:17  lelelelele  阅读(135)  评论(0编辑  收藏  举报