题目—求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
首先我们要捋清思路,不能使用四则运算符,我们就可以使用位运算符。对这两个数在更底层的角度上进行运算。
实现的步骤:
- 这两个数做异或操作。
- 再对这两个数进行按位与操作。得到一个值,将这个值向左移一位。
- 将1得到的结果赋值给num1.
- 将2得到的结果赋值给num2.
- 重复上面四步操作,直到num2为0.
原理:异或操作是得到不考虑进位的最终结果,第二步是得到哪些位是有进位的,由于这些位上的数都是有进位的所以我们需要将其向左移一位,下面需要将上面两步所得到的值进行相加,也就是重复这两步。边界条件就是第二个进位后的值为0,就可以终止循环,得到最后的结果了。
具体代码实现如下:
#include <iostream>
using namespace std;
class Solution
{
public:
int Add(int num1, int num2)
{
int sum,mark;
do{
sum = num1^num2;
mark = (num1&num2)<<1;
num1=sum;
num2=mark;
}while(num2!=0);
return num1;
}
};
int main()
{
Solution s;
cout<<s.Add(-1,3)<<endl;
return 0;
}