题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷ 四则运算符号。
算法分析
1. 两个数异或:相当于每一位相加,而不考虑进位;
2. 两个数相与,并左移一位:相当于求得进位;
2. 将上述两步的结果相加,即重复1,2。
提交代码:
class Solution {
public:
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 sum;
}
};
测试代码:
// ====================测试代码====================
void Test(int num1, int num2, int expected)
{
Solution s;
int result = s.Add(num1, num2);
if (result == expected)
printf("%d + %d is %d. Passed\n", num1, num2, result);
else
printf("%d + %d is %d. FAILED\n", num1, num2, result);
}
int main(int argc, char* argv[])
{
Test(1, 2, 3);
Test(111, 899, 1010);
Test(-1, 2, 1);
Test(1, -2, -1);
Test(3, 0, 3);
Test(0, -4, -4);
Test(-2, -8, -10);
return 0;
}