Leetcode 29

按位运算左移<<1相当于*2,右移>>1相当于/2;

用if排除INT_MIN除以-1的问题

int divide(int dividend, int divisor) {
        if(divisor==0||(dividend==INT_MIN&&divisor==-1))return INT_MAX;
        long long m=abs((long long)dividend),n=abs((long long)divisor),res=0;
        int sign=(dividend<0)^(divisor<0)?-1:1;
        if(n==1)return sign==1?m:-m;
        while(m>=n)
        {
            long long tem=n,count=1;
            while(m>=(tem<<1))
            {
                tem<<=1;
                count<<=1;
            }
            res+=count;
            m-=tem;
        }
        return sign==1?res:-res;
    }

猜你喜欢

转载自blog.csdn.net/TempterCyn/article/details/82959669