题目:

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

示例:

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

提示:

  • a,b均有可能是负数或0
  • 结果不会溢出32位整数

初始思路:

看到题目我就明白只能用位运算,但因为对位运算熟悉度不够,只能想到>>或者<<,能够起到*2,/2的作用,然后选择复制参考了一波题解,着实被惊艳到,所以话不多说,上正菜。

参考思路:

采用半加法的思想,即两个二进制数单独的位相加其结果可以用异或运算得到,进位可以用与运算得到。

解释

例:2+3,相当于10+11(二进制)
1.10^11=01(类似与8+9=7,未加上进位),进位:carry=(10&11<<1=100
2.01^100=101(加上进位),进位:carry=(001&100)<<1=0(进位为0,结束运算)

代码实现:

class Solution {
public:
int add(int a, int b) {
return b == 0 ? a : add(a ^ b, (unsigned int)(a & b) << 1);
}
};

LeetCode(不用加号的加法)的更多相关文章

  1. python不用加号实现加法

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

  2. C语言不使用加号实现加法运算的几种方法

    今天看到<编码:隐匿在计算机软硬件背后的语言>的第十二章:二进制加法器.讲述了全加器,半加器的原理以及如何实现加法.实现加法时所使用的全加器,半加器中包含的所有逻辑门在C语言中都有相应的运 ...

  3. 剑指offer 65. 不用加减乘除做加法(Leetcode 371. Sum of Two Integers)

    剑指offer 65. 不用加减乘除做加法(Leetcode 371. Sum of Two Integers) https://leetcode.com/problems/sum-of-two-in ...

  4. 【剑指Offer】不用加减乘除做加法 解题报告(Java)

    [剑指Offer]不用加减乘除做加法 解题报告(Java) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...

  5. 编程算法 - 不用加减乘除做加法 代码(C)

    不用加减乘除做加法 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 写一个函数, 求两个整数之和, 要求在函数体内不得使用+, -, *, /四 ...

  6. Python 解决面试题47 不用加减乘除做加法

    在看<剑指Offer>过程中,面试题47不用加减乘除做加法,给出的思路是使用二进制的异或以及与运算,总之就是使用二进制.但是在使用Python实现的过程中,对于正整数是没有问题的,但是对于 ...

  7. 剑指offer(48)不用加减乘除做加法

    题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 题目分析 不用加减乘除做加法,我第一时间想到的就是用位运算,毕竟计算机是二进制的,所有的操作都是以位运算为基础 ...

  8. 《剑指offer》第六十五题(不用加减乘除做加法)

    // 面试题65:不用加减乘除做加法 // 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.×.÷ // 四则运算符号. #include <iostream> int A ...

  9. 剑指offer42:不用加减乘除做加法

    分析: (1)十进制加法分三步:(以5+17=22为例) 1. 只做各位相加不进位,此时相加结果为12(个位数5和7相加不进位是2,十位数0和1相加结果是1): 2. 做进位,5+7中有进位,进位的值 ...

随机推荐

  1. js各继承方法的优缺点

    在js中有很多种继承的方法,下面总结这些方法的优缺点. ####1.原型链继承 优点: 非常纯粹的继承关系,实例是子类的实例,也是父类的实例 父类新增原型方法/原型属性,子类都能访问到 简单,易于实现 ...

  2. 手机安装fiddler证书

    如果电脑浏览器和手机抓包有证书问题,那就把电脑的证书都删除,然后在fiddler里重置,手机上删除不了单个证书,可以重新下载一个证书安装 如果电脑抓包正常,手机抓包不正常,那就手机重新下载证书安装 手 ...

  3. PHP--修改数据库表前缀

    <?php // error_reporting(0); //设置好相关信息 $dbserver='localhost';//连接的服务器一般为localhost $dbname='jfpay' ...

  4. 撰写introduction|引用

    科研论文写作-introduction Introduction主要是写研究的来龙去脉,即该研究的历史,包括以前存在问题及其评价,和现今研究创新点,这样引导读者便于理解,阐述的内容也是由背景.目的.方 ...

  5. Ho|H1|p-value|p值与U值|单侧检验

    生物统计学 统计推断的过程: Ho:XXXX会发生 H1:XXXX不会发生 p:XXXX会发生的概率(概率计算过程),如果是小概率,则H0不可能发生,所以拒绝H0接受H1. 概率计算过程:先设定小概率 ...

  6. EventBus 3.0 的基本使用

    EventBus 3.0 的基本使用 1.什么是EventBus? EventBus 是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间.组件与后台线程间 ...

  7. <BZOJ3032>七夕祭

    水 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> ...

  8. e代驾狂野裁员 O2O逐渐恢复理智?

    O2O逐渐恢复理智?" title="e代驾狂野裁员 O2O逐渐恢复理智?">     近段时间以来,O2O行业堪称"哀鸿遍野",十分凄惨.巨头 ...

  9. JNI 问题 wrong ELF class

    使用JNI发现一个问题, wrong ELF class: ELFCLASS64)主要是机器是64位的OS,默认编译的.so是64位 而java设置的默认是32位 JDK, 所以会出现这个问题.那么就 ...

  10. Activity源码解析 - 读书笔记

    1. Activity启动 Activity是一个比较好的模板方法模式.在Android系统启动时,第一个启动的进程是zygote进程,然后由zygote启动SystemServer,再后就是启动AW ...