[leetcode]29. Divide Two Integers

来源:互联网 发布:江歌的遇害事件知乎 编辑:程序博客网 时间:2024/06/05 01:23

Divide two integers without using multiplication, division and mod operator.

If it's overflow, return INT_MAX.

代码转载

class Solution {public:    int divide(int dividend, int divisor)    {        long long int ret = divideLong(dividend, divisor);        if(ret > INT_MAX || ret < INT_MIN)            return INT_MAX;        return ret;    }    long long int divideLong(long long dividend, long long divisor) {        // extreme cases        if(divisor == 0)            return INT_MAX;        if(dividend == 0)            return 0;                        int sign = 1;        if((dividend < 0) ^ (divisor < 0))                    sign = -1;        dividend = abs(dividend);        divisor = abs(divisor);        long long ret = 0;        while(dividend > divisor)        {            int shift = 0;            long long part = 1;            while(dividend > (divisor << shift))            {                part <<= 1;                shift ++;            }            if(dividend == (divisor << shift))            {                ret += part;                break;            }            else            {// dividend < (divisor << shift)                part >>= 1;                shift --;            }            ret += part;            dividend -= (divisor << shift);        }        if(dividend == divisor)            ret ++;                    return sign * ret;    }};


0 0
原创粉丝点击