【LintCode】1. A + B 问题

给出两个整数 a 和 b, 求他们的和

样例
样例 1:
输入: a = 1, b = 2
输出: 3
样例解释: 返回a+b的结果.

样例 2:
输入: a = -1, b = 1
输出: 0
样例解释: 返回a+b的结果.

挑战
显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?(不使用++等算数运算符)

说明
a和b都是 32位 整数么?

是的
我可以使用位运算符么?

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

//2进制转换 先进行 异或转化 直到其中一个为0 位为止
    public static int aplusb(int a, int b) {
        if (a == 0) return b;
        if (b == 0) return a;
        int sum, i;
        // 1001  0001 1000
        // 1010  0000 0011
        // 0011  0001 1011
        // 3     19
        //忽略进位 a^b 相同为0,不同为1 结果为 0011   3
        i = a ^ b;
        //a&b 类似,但规则为都是1则为1,否则为0
        // 结果 1100  12  << 向左移位 为 0001 1000  结果是16
        // 结果 0000 0000  0  << 向左移位 为 0000 0000  结果是0
        sum = (a & b) << 1;
        return aplusb(sum, i);
    }

你可能感兴趣的:(【LintCode】1. A + B 问题)