LintCode-1.A + B 问题

A + B 问题

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

注意事项

你不需要从输入流读入数据,只需要根据aplusb的两个参数a和b,计算他们的和并返回就行。

说明

a和b都是 32位 整数么?
是的
我可以使用位运算符么?
当然可以

样例

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

挑战

显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?

标签

Cracking The Coding Interview 比特位操作

code

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.
        int result=0,num=0;

        do {
            result = a ^ b;
            num = (a & b) << 1;
            a = result;
            b = num;
        } while(b != 0);

        return result;
    }
};
posted @ 2017-05-04 17:11  LiBaoquan  阅读(204)  评论(0编辑  收藏  举报