设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。

示例:

输入: a = 1, b = 1
输出: 2



解:使用加法器的原理
加法器需要三步 1.a和b异或的结果 2.a+b的进位c,3.c和下面一次的相加

 

  step1=a^b,step2=a&b,step3=(a&b)<<1   举个例子,c的二进制 ····0010, d的二进制 ····0010  (c&d)=0010 左移一位0100,我们本来就应该进个1的

class Solution {
public:
    int add(int a, int b) {
        if(b==0)
            return a;
        int step1=0, step2=0, step3=0;
        while(b!=0){
            step1 = a^b;
            step2 = a&b;
            step3 = (unsigned int)step2 << 1;
            a = step1;
            b = step3;
        }
        return step1;
    }
};

作者:Eric_Light
链接:https://leetcode-cn.com/problems/add-without-plus-lcci/solution/bu-yong-hao-de-jia-fa-by-oneway-4/

 

posted on 2020-02-27 17:54  纯正肉包  阅读(136)  评论(0编辑  收藏  举报