题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路(由于不能使用四则运算,所以考虑使用位运算)
- 不考虑进位,对每位进行相加。1和1,0和0相加都为0,1和0相加为1,就可以使用异或来处理。
- 对于进位,0和0,1和0都相加都不产生进位,只有1和1相加才会进位,即10。这个可以使用&来处理,只要将与的结果左移位就可以了。
- 继续执行前两步的操作,直到没有进位为止。可以使用递归进行处理。
具体代码
class Solution {
public:
int Add(int num1, int num2)
{
int sum,carry;
sum=num1^num2;
carry=(num1&num2)<<1;
if(carry)return Add(sum,carry);
return sum;
}
};