29. 两数相除(LeetCode中等)(二进制)

29. 两数相除

class Solution {
public:
    int divide(int dividend, int divisor) {
        typedef long long LL;
        vector<LL> exp;
        bool is_minus = false;
        if(dividend < 0 && divisor > 0 || dividend > 0 && divisor < 0) is_minus = true;

        LL a = abs(LL(dividend)), b = abs(LL(divisor));
        for(LL i = b; i <= a; 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 *= -1;

        if(res > INT_MAX) res = INT_MAX;
        
        return res;
    }
};
posted @ 2025-03-15 17:43  awei040519  阅读(20)  评论(0)    收藏  举报