29. Divide Two Integers

来源:互联网 发布:南昌神起网络 编辑:程序博客网 时间:2024/05/15 09:54

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

If it is overflow, return MAX_INT.

思路:这题真是做了漫长的一下午! 最简单的方法就是被除数

class Solution {public:    int divide(int dividend, int divisor) {        if(!divisor) return dividend>=0 ? INT_MAX : INT_MIN; //如果除数为0的情况        if(dividend==INT_MIN && divisor==-1) return INT_MAX; // 如果被除数为最小值,除数为-1的时候,得到的结果会超过最大数        long long a = abs((long long)dividend); //转成long long怕左移的时候溢出        long long b = abs((long long)divisor);        int shift = 0;        int res = 0;        long long remain = a;        while (remain >= b)        {            long long tmp = b;            shift = 0;            while (remain >= tmp)            {                tmp <<= 1;                shift++;            }            res += 1 << (shift - 1);            long long tmp2 = b << (shift - 1);            remain = remain - tmp2;        }       // res = ((dividend ^ divisor) >> 31) ? (-res) : (res);    //    if (res > INT32_MAX) return INT32_MAX;        if ((divisor > 0) != (dividend > 0))            res = -res;        return res;    }};
0 0