Divide Two Integers问题及解法

来源:互联网 发布:看门狗2柯比湾重要数据 编辑:程序博客网 时间:2024/06/05 02:00

问题描述:

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

If it is overflow, return MAX_INT.

问题分析:

首先把容易溢出的案列举出来:除数为零或者被除数等于INT_MIN,除数等于-1。

接下来,我们可以根据十进制数转换为二进制数的方法,逐层求得结果。


过程详见代码:

class Solution {public:    int divide(int dividend, int divisor) {        if (!divisor || (dividend == INT_MIN && divisor == -1))            return INT_MAX;        long long res = 0;        int sign = (dividend < 0 && divisor < 0) || (dividend > 0 && divisor > 0);        long long dividend1 = abs((long long)dividend);        long long divisor1 = abs((long long)divisor);        while(divisor1 <= dividend1)        {        long long temp = divisor1, multiple = 1;            while (dividend1 >= (temp << 1)) {                temp <<= 1;                multiple <<= 1;            }        res += multiple;        dividend1 -= temp;}return sign == 1 ? res : -res;    }};


原创粉丝点击