[LintCode]1.A + B 问题 位运算
来源:互联网 发布:卸载软件工具下载 编辑:程序博客网 时间:2024/06/01 09:28
给出两个整数a和b, 求他们的和, 但不能使用 +
等数学运算符。
注意事项
你不需要从输入流读入数据,只需要根据aplusb
的两个参数a和b,计算他们的和并返回就行。
说明
a和b都是 32位
整数么?
- 是的
我可以使用位运算符么?
- 当然可以
样例
如果 a=1
并且 b=2
,返回3
思路:利用位运算来解决A+B的问题,可以将此问题转化为解决不进位相加和进位(carry bit)的两部分问题:
1. 首先是不进位相加:_A = A^B 先对A和B进行异或运算(XOR manupitation) , A 和B 中两位不相同的变为1,相同的变为 0, 同为1是不进位
2. 其次是进位 _B =(A&B)<<1
所以 A+B = A^B + (A&B)<<1
3.在循环中(A&B)<<1 的目的是将要进位的1一直向左移动,之后与新生成的_A进行异或运算,来进行进位运算的模拟(这一步就是进位)
4. 直到将所有的1全部向左移位为0
class Solution {public: /* * @param a: An integer * @param b: An integer * @return: The sum of a and b */ int aplusb(int a, int b) { while (b != 0) { int _a = a ^ b; int _b = (a & b) << 1; a = _a; b = _b; } return a; }};
阅读全文
0 0
- [LintCode]1.A + B 问题 位运算
- lintcode刷题 A + B 问题 位运算
- 【lintcode】1、A+B问题【位运算】
- LintCode | 1. A + B 问题
- LintCode 1.A + B 问题
- LintCode-A + B 问题
- Lintcode A+B问题
- LintCode-A + B 问题
- LintCode A+b问题
- LintCode-A + B 问题
- lintcode -- A+B问题
- Lintcode:A + B 问题
- A+B(位运算)
- LintCode-第一题:A+B problem (不用“+”等运算符)(位运算实现加法)
- LintCode 1. A + B 问题 ☆
- LintCode之A+B问题
- Lintcode 1 A + B 问题
- 【LintCode】1、A + B问题
- 459. Repeated Substring Pattern
- #随机#:python、redis等
- HDU 6153 A Secret(KMP/扩展KMP)
- 第十三篇:观察者模式 : 一支穿云箭,千军万马来相见
- 2018链家笔试编程题
- [LintCode]1.A + B 问题 位运算
- 拦截器
- 吐血推荐:深入理解Mysql 锁!玩MYSQL必备!
- 网络编程之服务器与客户端的建立
- springBoot(二)springboot配置读取、配置原理及其视图
- 神经网络中的反向传播的推导和python实现
- C 共用体
- JavaWeb简介
- spring,mybatis事务管理配置与@Transactional注解使用[转]