面试题51:不用加减乘除做加法
2016-01-13 20:40
423 查看
题目:
写一个函数,求两个整数的和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路:
由于不能出现四则运算,所以很快想到可不可以用位运算来。
下面来分析。
以5+7为例,101+111
第一步,我们不考虑进位,得到的sum为010(异或可以完成)
第二步,记下进位,得到的进位carry为101(位与可以完成)
第三步,将进位左移一位后,与sum求和(求和??其实是回到第一步,结束条件为carry为0)。
写一个函数,求两个整数的和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路:
由于不能出现四则运算,所以很快想到可不可以用位运算来。
下面来分析。
以5+7为例,101+111
第一步,我们不考虑进位,得到的sum为010(异或可以完成)
第二步,记下进位,得到的进位carry为101(位与可以完成)
第三步,将进位左移一位后,与sum求和(求和??其实是回到第一步,结束条件为carry为0)。
#include <iostream> #include <vector> using namespace std; int Add(int num1,int num2) { int sum=0,carry=0; do{ sum=num1^num2; carry=(num1&num2)<<1; num1=sum; num2=carry; } while(num2!=0); return num1; } int main() { cout<<Add(5,7)<<endl; return 0; }
相关文章推荐
- java工程师面试题积累中...
- android面试所涉及的范围及学习方向
- 面试题12:打印1到最大的n位数
- 黑马程序员@之API的故事
- 黑马程序员@面向对象之修饰符和内部类(难点)
- 黑马程序员@面向对象之多态和接口
- 黑马程序员@java面向对象之继承
- 黑马程序员@java基础中重点之面向对象
- iT大牛高老师免费收徒
- 迎接2016,一个程序员的总结
- 面试题50:求1+2+...+n
- it大牛高洛峰收徒
- 2015年程序员薪资调查报告
- Java并发多线程面试题 Top 50
- 面试题49:圆圈中最后剩下的数字*
- 关于发展职业之外的爱好
- 面试题48:扑克牌的顺子
- #转载#我给所有新手程序员的建议
- 浅谈软件开发人员的职业发展规划
- 美团测试实习生面试