剑指Offer-不用加减乘除做加法
来源:互联网 发布:sql count 1 编辑:程序博客网 时间:2024/05/28 15:26
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
题目解析
题目比较明确,不用加减乘除的方式来计算两个数字的和,应该很自然的想到用与或非等逻辑运算以及位移作为辅助的方式来计算其值。
解题思路
模拟一个加法的过程
5 + 1
101
00 1
------
110
这里面涉及到了进位,如果去掉进位来看,也就是末尾的1+1进位转为0了,那么现在的数为100,然后进位数字为1,进位1位相当于1<<1,然后再不考虑进位的情况下继续加法算出其值,也就是110,然后这时候,计算进位为0,也就是说不进位,那么这个计算出来的值就是结果,当然,如果说是7+1的话需要不断的进位,这个时候就是一个进位与在不考虑进位值的情况下计算出来的值的一个不断叠加的过程,那么,不考虑进位值这个过程对应于逻辑运算应该是异或,而进位过程应该是求两者的&运算,相同的值都为1的时候,存在进位。
代码实现
public class Solution { public int Add(int num1,int num2) { while(num2 != 0) { int temp = (num1 ^ num2); num2 = (num1&num2) << 1; num1 = temp; } return num1; }}先求出两者不考虑进位的情况下的和,然后求出进位,判断进位是不是0,不是0就说明存在进位,那么就要继续将当前的值重复这一过程。
阅读全文
0 3
- 【剑指offer】不用加减乘除做加法
- 【剑指offer】不用加减乘除做加法
- 剑指Offer之 - 不用加减乘除做加法
- 剑指offer: 不用加减乘除做加法
- 剑指offer 不用加减乘除做加法
- 《剑指offer》不用加减乘除做加法
- 剑指offer--不用加减乘除做加法
- 剑指offer:不用加减乘除做加法
- 【剑指offer】之不用加减乘除做加法
- 剑指offer-不用加减乘除做加法
- 《剑指offer》不用加减乘除做加法
- 剑指offer:不用加减乘除做加法
- 剑指Offer--047-不用加减乘除做加法
- 剑指offer题解 不用加减乘除做加法
- 《剑指offer》:[47]不用加减乘除做加法
- 《剑指offer》-不用加减乘除做加法
- 剑指offer 不用加减乘除做加法
- 【剑指offer】不用加减乘除做加法
- 几种UITableview自定义Cell的办法
- 前端跨域策略
- 自定义日出日落曲线动画
- Opencv实现离散小波变换小结
- WeakHashMap的使用场景
- 剑指Offer-不用加减乘除做加法
- 20170619签到帖
- H5 和移动端 WebView 缓存机制解析与实战
- STL顺序容器vector与list
- 维吉尼亚密码
- phpexcel批量导出数据【用法说明】
- XSS漏洞: new Image().src = 'javascript:alert(1)';
- 优质react native开源项目
- Jenkins 邮件配置