题目:
写一个函数,求两个数的和,不能使用加减乘除四则运算符。
#include <iostream>
using namespace std;
int Add(int num1, int num2)
{
int sum, carry;
do {
sum = num1 ^ num2;
carry = (num1 & num2) << 1;
num1 = sum;
num2 = carry;
} while (num2 != 0);
return num1;
}
int main()
{
cout << Add(5, 17);
getchar();
return 0;
}
输出:22
实现思路:
第一步,先不考虑进位,对每一位相加。0和0,1和1都得0,1和0得1,这显然是跟异或运算符的结果是一样的。
第二步,记录进位。把相加的两个数相与,再左移一位,就得到了需要进位的值。
第三步,把之前的两个步骤结果相加。由第一步得知,相加,使用异或运算符。