LeetCode 371. Sum of Two Integers

来源:互联网 发布:winpe装linux 编辑:程序博客网 时间:2024/06/16 12:46

371. Sum of Two Integers

Description

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

Example:Given a = 1 and b = 2, return 3. 

Solution

  • 题目的意思是不使用加法运算符和减法运算符来完成两个数的加法。
  • 我们可以使用位运算模拟机器对加法的处理(加法器组成的ALU),我们可以通过异或得到各位相加,与运算获得各位是否需要进位。
  • 我们分析原始的竖式加法,各位相加,如果大于进制数就进位,位运算是基于二进制的,所以>=2就需要进位。 a ^ b获得的是两个数按位相加的结果(未进行进位,比如2 ^ 3 就是 10 ^ 11 得到 01 此时需要进位) a & b获得的是两个数各位相加需要进位的位(比如2 & 3就是10 & 11 就是 10 代表第二位需要进位,) 但是我们进位是需要向前面一位进位,所以(a & b) << 1得到需要进到的那一位。 代码如下:
class Solution {public:    int getSum(int a, int b) {        return b == 0?a:getSum(a ^ b,(a & b) << 1);    }};