码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode刷题05

时间:2020-02-27 19:23:19      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:image   etc   alt   inf   bsp   技术   ret   strong   算术   

 

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

示例:

输入: 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/

 

leetcode刷题05

标签:image   etc   alt   inf   bsp   技术   ret   strong   算术   

原文地址:https://www.cnblogs.com/czrb/p/12373397.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!