给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
被除数和除数均为 32 位有符号整数。
除数不为 0。
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^31, 2^31 − 1]。本题中,如果除法结果溢出,则返回 2^31 − 1。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/divide-two-integers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
减数叠加逼近被除数,如果减数太大就还原。商碰到边界就返回。
class Solution {
public int divide(int dividend, int divisor) {
if (dividend == 0) return 0;
int opt = (dividend ^ divisor) >= 0 ? 1:-1;
dividend = Math.abs(dividend);
divisor = Math.abs(divisor);
int res = 0, mult = divisor, multn = 1;
while (dividend - divisor >= 0) {
if (res*opt == Integer.MIN_VALUE || res*opt == Integer.MAX_VALUE) return Integer.MAX_VALUE;
if (dividend - mult < 0){
mult = divisor;
multn = 1;
}
dividend -= mult;
res += multn;
multn += multn;
mult += mult;
}
return res * opt ;
}
}