414. 两个整数相除
将两个整数相除,
要求不使用乘法、除法和 mod 运算符。
如果溢出(超出32位有符号整型表示范围),返回
2147483647
。
整数除法应截断为零。
样例
样例 1:
输入: 被除数 = 0, 除数 = 1
输出: 0
样例 2:
输入: 被除数 = 100, 除数 = 9
输出: 11
public class Solution {
/**
* @param dividend: the dividend
* @param divisor: the divisor
* @return: the result
*/
public int divide(int dividend, int divisor) {
if (divisor == 0) {
return Integer.MAX_VALUE;
}
if (dividend == 0) {
return 0;
}
//-2147483648 / -1 = 2147483648 溢出
if (dividend == Integer.MIN_VALUE && divisor == -1) {
return Integer.MAX_VALUE;
}
boolean isPositive=false;
if (dividend<0){
isPositive=true;
}
if (divisor<0){
isPositive=!isPositive;
}
int result = 0;
long absDividend = Math.abs((long)dividend);
long absDivisor = Math.abs((long)divisor);
while (absDividend >= absDivisor) {
int shift = 0;
while (absDividend >= (absDivisor << shift)) {
shift++;
}
absDividend -= absDivisor << (shift - 1);
result += 1 << (shift - 1);
}
return isPositive ? -result : result;
}
}