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

If it is overflow, return MAX_INT.

本题是求除法,但是要注意int的边界值。时间:14ms,代码如下:

class Solution {
public:
    int divide(int dividend, int divisor) {
        if (divisor == 0 || dividend > INT_MAX || dividend < INT_MIN)
            return INT_MAX;

        long long res = 0;
        int flag = 1;
        if ((dividend<0 && divisor>0) || (dividend>0 && divisor<0))
            flag = -1;

        long long divid = abs((long long)dividend);
        long long divi = abs((long long)divisor);
        long long temp = 0;
        if (divid < divi)
            return 0;
        while (divi <= divid){
            long long cnt = 1;
            temp = divi;

            while ((temp <<= 1) <= divid){
                cnt <<= 1;
            }
            res += cnt;
            divid -= (temp >> 1);

        }
        res = (res*flag);
        if (res >= INT_MAX)
            return INT_MAX;
        else if (res <= INT_MIN)
            return INT_MIN;
        return res;
    }
};

 

posted on 2015-06-13 23:05  NealCaffrey989  阅读(143)  评论(0编辑  收藏  举报