不用加减乘除做加法
- 参与人数:1096时间限制:1秒空间限制:32768K
- 通过比例:37.37%
- 最佳记录:0 ms|0K()
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路:我首先想到的是二进制位运算,是的。还记得之前swap的实现吗?
a=a^b;
b=a^b;
a=a^b;
就可以不借助第三个变量把a,b交换!
其实这和
a=a+b;
b=a-b;
a=a-b;
有一定的联系呢。哈哈!
如果我把c=a^b;
d=(a&b)<<1;//这是进位;那么c^d就是得到的和,前提是c&d==0即没有再进位了。那么来个循环吧。
自己在草稿纸上模拟下进位的过程,就ok了!
#include<stdio.h>
class Solution {
public:
int Add(int num1, int num2)
{
int tmp1=num1^num2;
int tmp2=num1&num2;
tmp2<<=1;
while(tmp2)
{
int tmp3=tmp1^tmp2;
tmp2=tmp1&tmp2;
tmp2<<=1;
tmp1=tmp3;
}
return tmp1;
}
};
int main()
{
Solution so;
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
printf("%d\n",so.Add(n,m));
}
return 0;
}