其他分享
首页 > 其他分享> > LeetCode29-两数相除-位运算-模拟

LeetCode29-两数相除-位运算-模拟

作者:互联网

原题链接

在这里插入图片描述

Note:

让算x / y

因为有极端情况会越界(比如说 INT_MIN / -1, 就爆 int 了)先转换成long long,最后算完之后加个判断即可

还有负数的情况,我们设置一个标志位,然后还是全部取绝对值进行运算,最后返回答案的时候在判断一下即可

然后就是正经的计算过程,我们开个数组,里面放着

2^0 * y      2^1 * y      ...2^position * y...       2^30 * y

然后每次从数组后面开始判断一下 x 是不是大于等于当前位置的数,如果大于,也就是说x / y >= nums[position] 那么答案的第position位置是1

x -= 2^position * y
res += 2^position

代码如下:

class Solution {
public:
    int divide(int x, int y) {
        typedef long long LL;
        vector<LL> exp;
        bool is_minus = false;
        if(x < 0 && y > 0 || x > 0 && y < 0)    is_minus = true;
        LL a = abs((LL) x), b = abs((LL) y);

        for(LL i = b; i <= a; i = i + i)   exp.push_back(i);

        LL res = 0;
        for(int i = exp.size() - 1; i >= 0; i --)
            if(a >= exp[i]){
                a -= exp[i];
                res += 1LL << i;
            }
        
        if(is_minus)    res = -res;
        if(res > INT_MAX || res < INT_MIN)  res = INT_MAX;

        return res;
    }
};

标签:int,res,LL,相除,INT,LeetCode29,long,position,两数
来源: https://blog.csdn.net/Mr_Ghost812/article/details/123147667