题目:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路:
- num1^num2可以得到不进位的加法。
- num1&num2可以得到进位的位置信息,(num1&num2)<<1 得到进位结果。
- 将前两步的结果相加,就得到num1+num2了。
class Solution {
public:
int Add(int num1, int num2)
{
int sum;
while(num2 != 0){
sum = num1^num2;
num2 = (num1&num2)<<1;
num1 = sum;
}
return num1;
}
};
递归实现:
class Solution {
public:
int Add(int num1, int num2)
{
if (num2 == 0) return num1;
return Add(num1^num2, (num1&num2)<<1 );
}
};