题目---求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

题目—求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。


首先我们要捋清思路,不能使用四则运算符,我们就可以使用位运算符。对这两个数在更底层的角度上进行运算。

实现的步骤:
  1. 这两个数做异或操作。
  2. 再对这两个数进行按位与操作。得到一个值,将这个值向左移一位。
  3. 将1得到的结果赋值给num1.
  4. 将2得到的结果赋值给num2.
  5. 重复上面四步操作,直到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;
}

猜你喜欢

转载自blog.csdn.net/weixin_40331034/article/details/81047156
今日推荐