leetcode 29 divide two integers

来源:互联网 发布:水果店软件 编辑:程序博客网 时间:2024/06/05 09:42

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 == 0) return INT_MAX;        bool pos = true;        if ((divisor < 0 && dividend > 0) || (divisor > 0 && dividend < 0)) pos = false;        long long dnd = dividend;        long long dor = divisor;        dnd = dnd > 0 ? dnd : -dnd;        dor = dor > 0 ? dor : -dor;        long long ret = div(dnd, dor);        ret = pos ? ret : -ret;        if (ret > INT_MAX) return INT_MAX;        return int(ret);    }private:     long long div(long long dnd, long long dor) {        if (dnd < dor) return 0;        if (dnd == dor) return 1;        long long add = dor;        long long ret = 1;        long long lastadd;        long long lastret;        while (dnd > add){            lastadd = add;            lastret = ret;            add = lastadd + lastadd;            ret = lastret + lastret;        }        ret = lastret + divide(dnd - lastadd, dor);        return ret;           }};

参考后

class Solution {public:    typedef long long ll;    int divide(int dividend, int divisor) {        if (divisor == 0) return INT_MAX;        bool pos = (divisor < 0) ^ (dividend < 0) ? false : true;        ll dnd = dividend;        ll dor = divisor;        ll ret = 0;        dnd = labs(dnd);        dor = labs(dor);        if (dnd < dor) return 0;        while (dnd >= dor){            ll add = dor;            ll tmp = 1;            while (dnd >= add << 1){                add <<= 1;                tmp <<= 1;            }            dnd -= add;             ret += tmp;        }        ret = pos ? ret : -ret;        if (ret > INT_MAX) return INT_MAX;        return int(ret);    }};
原创粉丝点击