這兩天去參加面試碰到的一個題,題不難,就是忘記了。
題目: 要求求兩個整數之和,並且不得使用+、-、*、/ 四則運算符號。
解析: 很明顯這個題要用二進制運算去解決。
- 二進制的按位相加實際等效於異或。
- 二進制的每位的進位計算等效於按位與,然後左移。
- 進位加上按位相加結果就是最終結果。 重複使用前兩步,直到沒有進位爲止。
代碼如下:
#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;
}