博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LintCode] A + B Problem(位运算)
阅读量:6850 次
发布时间:2019-06-26

本文共 765 字,大约阅读时间需要 2 分钟。

Problem

Write a function that add two numbers A and B. You should not use + or any arithmetic operators.

Example

Given a=1 and b=2 return 3

Challenge

Of course you can just return a + b to get accepted. But Can you challenge not do it like that?

Note

**位运算笔记

Bit Manipulation Notes:**

加法:

  1. ^异或运算:求和;

  2. &与运算:进位。

减法:

  1. 将负数化为正:~i, +1,两步完成取反

  2. 做加法

乘法:

  1. a * b: if (b & 1) ans += a //b的最后一位是1,则结果+a

  2. 每次循环后a << 1, b >> 1; //b始终判断最后一位,a进位累加(小学生算式做乘法)

除法:(不赘述,O(log n))

http://blog.csdn.net/ojshilu/article/details/11179911

Solution

class Solution {    public int aplusb(int a, int b) {        // write your code here, try to do it without arithmetic operators.        if (b == 0) return a;        int sum = a^b;        int carry = (a&b) << 1;        return aplusb(sum, carry);    }}
你可能感兴趣的文章
STL里的算法
查看>>
CAAnimation动画/CAAnimation Group
查看>>
iPhone开发 - 常用库
查看>>
Orchard模块开发全接触1:起步
查看>>
黄聪:ionic使用ion-nav-bar设置了bar-positive类但在安卓Android设备中无法置底
查看>>
[Windows Phone]AnimationHelper管理分散的Storyboard
查看>>
[产品设计]我对移动互联网产品的观点
查看>>
理解和上手Redux
查看>>
安装office2016 64位时提示64位与32位的office程序不兼容,在系统是64位的情况下,由于应用的需要,必须装64位的office,怎么办...
查看>>
6.1指针的概念?
查看>>
格林威治时间(时间戳)转换成标准时间
查看>>
OpenGL中各种坐标系的理解[转]
查看>>
iOS - 正则表达式判断邮箱、身份证..是否正确
查看>>
linux基础—课堂随笔04_文件查找和压缩
查看>>
RegExp(正则表达式)常用知识点小结
查看>>
iOS 上架
查看>>
网络编程之UDP编程
查看>>
Carthage使用
查看>>
dede栏目添加自定义字段方法
查看>>
跟着实例学习设计模式(9)-桥接模式bridge(结构型)
查看>>