Description:
将两个整数相除,要求不使用乘法、除法和 mod 运算符。
如果溢出,返回 2147483647
。
Explanation:
给定被除数 = 100
,除数 = 9
,返回 11
。
Solution:
用二进制计算,循环减去 divisior的(2^n)倍,如果dividend的值小于divisor的(2^n)倍,设置temp值为division,重新开始计算,直至dividend < divisor。
要注意边界一处的情况。
Adopt binary system to calculate. Move a binary of the divisor towards left each time to get divisor*(2^n)named temp, then calculate the difference of dividend and temp and dividend = difference till dividend < temp.Then repeat the steps above till dividend < divisor.
public class Solution {
/**
* @param dividend the dividend
* @param divisor the divisor
* @return the result
*/
public int divide(int dividend, int divisor) {
// Write your code here
if(divisor == 0){
return 2147483647;
}
boolean positive = true;
if(dividend < 0){
positive = !positive;
}
if(divisor < 0){
positive = !positive;
}
long div1 = (long)Math.abs((long)dividend);
long div2 = (long)Math.abs((long)divisor);
long result = 0;
while(div1 >= div2){
long current = 1;
long temp = div2;
while(div1 >= temp){
div1 -= temp;
result += current;
temp = temp << 1;
current = current << 1;
}
}
if(!positive){
result = 0 - result;
}
if(result > 2147483647 || result < -2147483648){
return 2147483647;
}
return (int)result;
}
}