LintCode之A+B问题

作者: 爱吃馒头的二饼 | 来源:发表于2019-03-04 19:18 被阅读1次

A+B问题
描述:给出两个整数 aa 和 bb , 求他们的和。

算法思路

在十进制的加法中,例如 6+7,个位为3,十位为110,所以6+7 = 110 + 3 ,我们在二进制加法中也可以利用这种思想
即:先算每一位相加不进位,然后再算进位,进位需要乘以该位代表的倍数,在二进制里就相当是左移一位

重要工具:

  • 利用抑或运算符计算出相加不进位的值 (抑或运算又称"不进位加法")

  • 利用与运算符计算出进位的位置

  • 利用左移运算符将其进位

    •  a ^ b 可求出二进制不进位加法得到的值
      
    •  a & b 可求出二进制加法需要进位的位置
      
    •  向前进一位 --- 将需要进位的位置左移一位
      
    •  将不进位加法得到的值与进的位相加 有可能又会引起进位
      
    •  重复上述步骤 --- 递归 直到没有进位 即b = 0 ,则a为最终结果
      

举例

 * 以3+5为例:
 *      3的二进制0011
 *      5的二进制0101
 *
 * 3^5 = 0110  6
 * 3&5 = 0001  1
 * 1 << 1 = 0010 2
 *
 * 则转换为6+2,重复上述步骤
 *      6的二进制0110
 *      2的二进制0001
 * 6^2 = 0111  8
 * 6&2 = 0000  0
 *
 * 进位为0,运算结束,结果为8

代码

    public static int getSum(int a, int b) {
        if(b == 0) {
            return a;
        }
        int c = a ^ b;
        b = (a & b) << 1;
        return getSum(c,b);
    }

相关文章

  • LintCode之A+B问题

    A+B问题描述:给出两个整数 aa 和 bb , 求他们的和。 算法思路 在十进制的加法中,例如 6+7,个位为3...

  • lintcode A+B问题

    这道题我们当然可以 return a + b来AC,但是那并不是此题的本意,这道题的意思是让我们不使用加号来实现加...

  • LintCode真题之A+B问题

    问题描述: 给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。 注意事项 你不需要从输入流读入数据...

  • [容易]1.A+B问题

    我是小小强,这是我的第5篇原创文章,阅读需要大约10分钟。 题目 LintCode:A+B问题 描述 给出两个整数...

  • winng的二月第一周题目

    [1] A+B问题 |lintcode1 思路:题目中要求用位运算,百度位运算实现。然后开心地发现了这篇简书,写的...

  • LintCode A+B Problem Python

    Description:Write a function that add two numbers A and B...

  • LintCode:A+B【位运算】

    问题描述: 给出两个整数 a 和 b , 求他们的和。(不使用+等算数运算符) 思路 关键点:不考虑进位的求和 x...

  • LintCode问题图解-1

    本文准备讲解1个简单的算法编程问题, 这个算法编程问题来自LintCode平台。不了解.LintCode平台的读...

  • LintCode问题图解-61

    本文准备讲解1个简单的算法编程问题, 这个算法编程问题来自LintCode平台。不了解.LintCode平台的读者...

  • LintCode问题图解-49

    本文准备讲解1个算法编程问题, 这个算法编程问题来自LintCode平台。不了解.LintCode平台的读者可以阅...

网友评论

    本文标题:LintCode之A+B问题

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