美文网首页
【LintCode】1. A + B 问题

【LintCode】1. A + B 问题

作者: Kean_Qi | 来源:发表于2020-05-11 17:43 被阅读0次

    给出两个整数 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 问题

          本文链接:https://www.haomeiwen.com/subject/rhfpnhtx.html