1.A+B问题

题目要求不给使用正常的四则运算,可以使用位运算。而A与B的二进制位的加运算其实就是异或运算"^"。但是考虑到每位可能有进位,所以还需要将A与B的位数都为1的和进位,通过a&b<<1可以实现。最后再通过递归将该进位的数与没有进位的数递归进行运算即可(因为可能加完进位后还有新的进位,所以仍要递归判断)。停止条件是当表示进位的数全为0,即没有进位的时候就可以停止递归,返回最终结果。

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(b == 0)  
        return a;  
     return aplusb(a^b, (a&b)<<1);
    }
};
posted @ 2017-12-06 21:55  MrYun  阅读(129)  评论(0)    收藏  举报