美文网首页
29. 两数相除

29. 两数相除

作者: justonemoretry | 来源:发表于2020-06-24 23:53 被阅读0次

自己解法

自己的解法,想着是不能乘除和mod的话,就只有用加减运算了,于是写了个循环减除法的解法,这个解法显然没通过,因为如果是除以1的话,基本要循环千万级别次。参考题解中,其实思路还是用减法去算,只是引入了位运算,每次都减去除数 乘以 2的n次方,等于是用移位变向地实现了乘法运算,下面上解法。

class Solution {

    public int divide(int dividend, int divisor) {

        boolean sign = (dividend > 0) ^ (divisor > 0);

        // 统一转成负数处理,负数最小值是2的整数次方

        if (dividend > 0) {

            dividend = -dividend;

        }

        if (divisor > 0) {

            divisor = -divisor;

        }

        int result = 0;

        while (dividend <= divisor) {

            int tempResult = -1;

            int tempDivisor = divisor;

            while (dividend <= tempDivisor << 1) {

                if (tempDivisor <= Integer.MIN_VALUE >> 1) {

                    break;

                }

                tempResult = tempResult << 1;

                tempDivisor = tempDivisor << 1;

            }

            dividend -= tempDivisor;

            result += tempResult;        

        }

        if (!sign) {

            if (result <= Integer.MIN_VALUE) {

                return Integer.MAX_VALUE;

            }

            result = -result;

        }

        return result;

    }

}

相关文章

  • 29. 两数相除

    29. 两数相除 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法...

  • 29. 两数相除

    29.两数相除 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和...

  • LeetCode 29. 两数相除

    29. 两数相除 题目来源:https://leetcode-cn.com/problems/divide-two...

  • 29. 两数相除

    29. 两数相除 题目链接:https://leetcode-cn.com/problems/divide-two...

  • 29.两数相除

    题目****给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 m...

  • 29. 两数相除

  • 29. 两数相除

    一、题目 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mo...

  • 29. 两数相除

    自己解法 自己的解法,想着是不能乘除和mod的话,就只有用加减运算了,于是写了个循环减除法的解法,这个解法显然没通...

  • 29. 两数相除

  • 29.两数相除

    题目描述: 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 m...

网友评论

      本文标题:29. 两数相除

      本文链接:https://www.haomeiwen.com/subject/mxljfktx.html