LeetCode 29. 两数相除 Divide Two Integers

Posted zsy-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 29. 两数相除 Divide Two Integers相关的知识,希望对你有一定的参考价值。

技术图片

 

 使用了long。没有解决int的溢出问题。

class Solution {
public:
    int divide(int dividend, int divisor) {
        //if (dividend == 0) return 0;
        //if (divisor == 1) return dividend;
        if (divisor == -1)
        {
            //只要不是最小整数,直接返回相反数
            if (dividend > INT_MIN) return -dividend;
            return INT_MAX;  //最小整数返回最大整数
        }

        long a = dividend;  //处理溢出
        long b = divisor;
        int sign = 1;
        if ((a > 0 && b < 0) || (a < 0 && b > 0))  //异号
            sign = -1;
        a = a > 0 ? a : -a;
        b = b > 0 ? b : -b;
        long res = div(a, b);
        if (sign > 0) return res > INT_MAX ? INT_MAX : res;
        return -res;
    }
    int div(long a, long b)
    {
        if (a < b) return 0;
        long cnt = 1;
        long tb = b;
        while ((tb + tb) <= a)  //加法代替乘法
        {
            cnt = cnt + cnt;
            tb = tb + tb;
        }
        return cnt + div(a - tb, b);
    }
};

 

以上是关于LeetCode 29. 两数相除 Divide Two Integers的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 29. 两数相除 Divide Two Integers

LeetCode 29 两数相除

LeetCode 29 两数相除

LeetCode 29 - 两数相除 - [位运算]

leetcode 29 两数相除

算法leetcode|29. 两数相除(rust重拳出击)