这两天去参加面试碰到的一个题,题不难,就是忘记了。
题目: 要求求两个整数之和,并且不得使用+、-、*、/ 四则运算符号。
解析: 很明显这个题要用二进制运算去解决。
- 二进制的按位相加实际等效于异或。
- 二进制的每位的进位计算等效于按位与,然后左移。
- 进位加上按位相加结果就是最终结果。 重复使用前两步,直到没有进位为止。
代码如下:
#include <stdio.h>
int Add(int num1, int num2)
{
int sum,carry;
do
{
sum = num1^num2;
carry = (num1 & num2)<<1;
num1 = sum;
num2 = carry;
printf("%d,%d\n",num1,num2); // 打印输出可以更方便看懂内部运行逻辑
}
while(num2!=0);
return num1;
}
int main()
{
int num1,num2;
scanf("%d%d",&num1,&num2);
printf("%d\n",Add(num1,num2));
return 0;
}