letcode29两数相除

这题,分类是二分。确实第一时间相出了二分做法,结果是超时的。。。
看了题解,看完实现的时候唉,边界真的不好控制,一言难尽。
先记录一下,明天补思路。

class Solution {
public:
    int divide(int dividend, int divisor) {
        if(divisor == 0) return 0;
        bool sign = (dividend<0) ^ (divisor<0);//1负,0正
        if(dividend==-2147483648 && divisor == -1) return -(dividend+1);
        long long d1, d2;
        if(dividend < 0) d1 = 0ll-dividend;
        else d1 = dividend;
        if(divisor < 0) d2 = 0ll-divisor;
        else d2 = divisor;
        long long ans = 0;
        while(d2<=d1){
            long long base = d2;
            long long num = 0;
            while(d1 >= base){
                base <<= 1;
                num ++;
            }
            num--;
            ans += (1<<num);
            d1 = d1 - (long long)(base>>1);
        }
        if(sign) return 0ll-ans;
        else return ans;
    }
};`
发布了75 篇原创文章 · 获赞 26 · 访问量 7667

猜你喜欢

转载自blog.csdn.net/qq_40962234/article/details/104565860