LeetCode: Divide Two Integers

来源:互联网 发布:pdf电子杂志制作软件 编辑:程序博客网 时间:2024/06/07 01:20

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) {        bool positive = true;        if(dividend == 0)            return 0;        if((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0))            positive = true;        else            positive = false;        unsigned int dvd = std::abs(dividend);        unsigned int dvs = std::abs(divisor);unsigned int dvs2 = dvs;        int step = 0;unsigned int result = 0;        while(dvd > dvs)        {            dvs = (dvs << 1);            step++;        }while(step >= 0){if(dvd >= dvs){dvd -= dvs;result += (1 << step);}dvs = dvs >> 1;step--;}if(result > INT_MAX && positive)result = INT_MAX;        if(positive)            return result;        else            return 0 - result;    }};

Round 2:

class Solution {public:    int divide(int dividend, int divisor) {        long a = dividend;        long b = divisor;        long result = 0;        int symbol = 0;        if((a > 0 && b > 0) || (a < 0 && b < 0))            symbol = 1;        a = std::abs(a);        b = std::abs(b);        long remain = a;        while(remain >= b)        {            long tempB = b;            long cur = 1;            while((tempB << 1) < remain)            {                tempB = tempB << 1;                cur = cur << 1;            }            remain = remain - tempB;            result += cur;        }        result = symbol > 0 ? result : 0-result;        if(result > INT_MAX || result < INT_MIN)            return INT_MAX;        return result;    }};


0 0
原创粉丝点击