剑指offer:不用加减乘除做加法
来源:互联网 发布:嵌入式单片机 编辑:程序博客网 时间:2024/06/05 20:51
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
1.非递归
思路:本道题用一个例子讲解可能会更为清晰点。现举5+7=12的例子来说明
1.将两个数字转化为二进制:5:0101 7:0111,将两个数做异或操作(即相当于加法的不进位操作)
5^7=0101^0111=0101
2.计算进位值,将两数做相与操作,如果出现1,即说明原来两个数对应位都为1,应该进位 了。因此向左移一位。
即:100=(010&1010)<<1。
3.如果进位不为0,那么继续操作。即:0010^1010=1000,进位值为100=(0010&1010)<<1。
进位为0,退出:1000^0100=1100, 进位值:1000&0100=0
输出相与结果:1100=12
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; }}
2.递归
public class Solution { public int Add(int num1,int num2) { if(num1==0)return num2; if(num2==0)return num1; else return Add(num1^num2,(num1&num2)<<1); }}
阅读全文
1 0
- 【剑指offer】不用加减乘除做加法
- 【剑指offer】不用加减乘除做加法
- 剑指Offer之 - 不用加减乘除做加法
- 剑指offer: 不用加减乘除做加法
- 剑指offer 不用加减乘除做加法
- 《剑指offer》不用加减乘除做加法
- 剑指offer--不用加减乘除做加法
- 剑指offer:不用加减乘除做加法
- 【剑指offer】之不用加减乘除做加法
- 剑指offer-不用加减乘除做加法
- 《剑指offer》不用加减乘除做加法
- 剑指offer:不用加减乘除做加法
- 剑指Offer--047-不用加减乘除做加法
- 剑指offer题解 不用加减乘除做加法
- 《剑指offer》:[47]不用加减乘除做加法
- 《剑指offer》-不用加减乘除做加法
- 剑指offer 不用加减乘除做加法
- 【剑指offer】不用加减乘除做加法
- 2017-8-21-既第一篇csdn博客文章
- mysql函数大全,特别详细
- Spring Cloud
- 利用SSM(springmvc+spring+mybatis)实现多表联合查询
- 【总结】办公&编程&学习你可能需要这些小利器!
- 剑指offer:不用加减乘除做加法
- python爬虫——获取新闻标题
- 全文搜索引擎 Elasticsearch 入门
- ubuntu python2.7安装MySQLdb
- 用aardio给python写个图形界面
- JavaScript 调试
- java正则表达式匹配空格 tab空格 制表符
- JavaScript的引用类型1(Object Array)
- CodeFroces 817B. Makes And The Product(构造)