剑指Offer:面试题47 不用加减乘除做加法
来源:互联网 发布:好玩的2d网络手游 编辑:程序博客网 时间:2024/04/27 23:19
/*
不用加减乘除做加法:
写一个函数,求两个整数之和,要求在函数体内不得使用+,-,*,/四则运算符号
分析:
尝试把二进制的加法用位运算来代替。
第一步不考虑进位对每一位相加。0加0,1加1的结果都是0,因此这里的加法与亦或效果相同。
只有1加1才能进位,即左移一位
想象成是两个数先做位与运算,然后在向左移动一位。只有两个数都是1的时候,位与的结果是1,其余都是0.
第三步相加的过程仍然是重复前面两步,直到不产生进位为止。
输入:
输入可能包含多个测试样例。
对于每个测试案例,输入为两个整数m和n(1<=m,n<=1000000)。
输出:
对应每个测试案例,输出m+n的值。
样例输入:
3 4
7 9
样例输出:
7
16
*/
/*
关键:
1 sum = num1 ^ num2;//因为二进制加与异或结果相同
pass = (num1 & num2) << 1;//进位同与的效果相同,注意还要左移一位
num1 = sum;//更新数字
num2 = pass;
*/
#include <stdio.h>
const int MAXSIZE = 1e6 + 1;
int add_bit(int num1,int num2)
{
int sum,pass;
do
{
sum = num1 ^ num2;//因为二进制加与异或结果相同
pass = (num1 & num2) << 1;//进位同与的效果相同,注意还要左移一位
num1 = sum;//更新数字
num2 = pass;
}while(num2);
return num1;
}
void process()
{
int num1,num2;
while(EOF != scanf("%d %d",&num1,&num2))
{
printf("%d\n",add_bit(num1,num2));
}
}
int main(int argc,char* argv[])
{
process();
getchar();
return 0;
}
- [剑指offer][面试题47]不用加减乘除做加法
- 剑指Offer:面试题47 不用加减乘除做加法
- 剑指offer 面试题47—不用加减乘除做加法
- 【剑指Offer学习】【面试题47:不用加减乘除做加法】
- 剑指offer-面试题47:不用加减乘除做加法
- 剑指offer之面试题47不用加减乘除做加法
- 剑指offer--面试题47:不用加减乘除做加法
- 剑指Offer系列-面试题47:不用加减乘除做加法
- 【面试题】剑指Offer-47-不用加减乘除做加法
- 剑指offer-面试题47-不用加减乘除做加法
- 剑指offer 面试题47 不用加减乘除做加法
- 【剑指Offer】面试题47:不用加减乘除做加法
- 【剑指Offer学习】【面试题47:不用加减乘除做加法】
- 【剑指offer】面试题65:不用加减乘除做加法
- 面试题47:不用加减乘除做加法
- 面试题47:不用加减乘除做加法
- 面试题47:不用加减乘除做加法
- 面试题47:不用加减乘除做加法
- VMware下CentOS 6编译内核
- Android之旅之一_一个偶然的机会
- c/c++笔试面试题
- rails学习
- 剑指Offer:面试题46 求1+2+...+n
- 剑指Offer:面试题47 不用加减乘除做加法
- 字典树(讲解+模版)
- 4种kill某个用户所有进程的方法
- 正则表达式语法
- 剑指Offer:面试题49 把字符串转换成整数
- IBM高层接受采访时透露更多与苹果合作细节
- 检验文件夹路径是否合法-MFC
- Effective C++ 33 避免遮掩继承而来的名称
- 最好的5个Android ORM框架