【一天一道LeetCode】#371. Sum of Two Integers
2016-07-10 23:18
323 查看
一天一道LeetCode
本系列文章已全部上传至我的github,地址:ZeeCoder‘s Github欢迎大家关注我的新浪微博,我的新浪微博
欢迎转载,转载请注明出处
(一)题目
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.Example:
Given a = 1 and b = 2, return 3.
(二)解题
题目大意:不用+或者-实现两个整数的加法解题思路:不用+或者-,就自然想到位运算,无非就是与或非来实现二进制的加法
首先,我们来看一位二进制的加法和异或运算
A | B | A&B | A^B |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 |
0 | 1 | 0 | 1 |
1 | 1 | 1 | 0 |
于是,我们想到对于多位数的加法,异或运算也能求出每一位上相加的值(没有进位),然后考虑到进位,与得出每一位上面的进位
每次进位左移一位与没有进位的值再求异或,一直算到进位为0,即可得出最后的相加的值。
class Solution { public: int getSum(int a, int b) { int sum = a; int carry = b; while(carry!=0) { int temp = sum^carry;//没有考虑进位的相加值 carry = (sum&carry)<<1;//进位左移一位,等待下一次循环加到sum中 sum = temp; } return sum; } };
相关文章推荐
- CSU - 1774 慷慨的奖励(模拟链表)
- 内存分析工具 MAT 的使用
- PAT乙级练习题B1044. 火星数字
- WebService服务创建
- Linux下MPI并行编程环境搭建配置
- UVa11582 巨大的斐波那契数 循环节计算+快速幂
- Java程序员不要错过的7款新工具
- HashMap vs ConcurrentHashMap — 示例及Iterator探秘
- JAVA_连接池、DataSource、JNDI
- HTML-文本格式化
- Ubuntu16虚拟机调整窗口大小自适应windows7
- 文章标题
- knockout源码分析之订阅
- CSS样式属性分类
- java-----ArrayList的fail-fast机制学习
- 企业开发专栏《物业管理系统》(一)
- MVVM的架构设计与团队协作 with StoryBoard
- 安全协议SDIoT的日常测试工作(1)
- Java线程
- 暑假训练Round1——G: Hkhv的水题之二(字符串的最小表示)