剑指offer——面试题:47不用加减乘除做加法
2015-09-08 11:31
666 查看
题目:
将两个数相加,不用+,—,乘,除。
思路:
(1)因为两个数相加可以考虑为先每一位相加,不进位。
(2)计算每一位的进位。
(3)将进位与之前那个位相加。
采用位运算,先将两个数位异或运算,得到没有进位的相加数。接着将两个数位与运算后左移一位。
得到两个数的进位。若是这个进位不为0则继续递归下去。
将两个数相加,不用+,—,乘,除。
思路:
(1)因为两个数相加可以考虑为先每一位相加,不进位。
(2)计算每一位的进位。
(3)将进位与之前那个位相加。
采用位运算,先将两个数位异或运算,得到没有进位的相加数。接着将两个数位与运算后左移一位。
得到两个数的进位。若是这个进位不为0则继续递归下去。
#include<iostream> using namespace std; int sum(int a,int b) { int c=a^b; int d=(a&b)<<1; if(d==0) return c; else return sum(c,d); } int main() { int a=5; int d=7; cout<<sum(a,d)<<endl; system("pause"); }
相关文章推荐
- 面试题36数组中的逆序对
- 由一道腾讯面试题引发的关于递归函数使用的各种情况总结
- 剑指Offer:面试题3 二维数组中的查找
- 人事面试题目总结
- 剑指offer——面试题47:圆圈中最后剩下的数字
- Java面试题:如何对HashMap按键值排序
- Java程序员应该知道的10个调试技巧
- 面试题 19
- 黑马程序员——多线程+单例设计
- 【.Net码农】初试T4模板
- 一些面试常考知识点
- 二分查找,递归与非递归实现
- 面试题摘选
- OSChina 周二乱弹 —— 程序员如何转行卖烧烤
- 面试题 18
- Java面试题
- 什么情况让程序员处于水深火热中
- 程序员赚钱致富的6种方法
- 首语
- 《卡耐基写给男人的12堂财商课》摘录