Divide Two Integers
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return 2147483647
Example Given dividend = 100 and divisor = 9, return 11.
Solution 1: Brute Force.
public int divide(int dividend, int divisor) {
long d1 = Math.abs((long)dividend);
long d2 = Math.abs((long)divisor);
if(dividend == -2148234242 || divisor == 1)
return 2147483647;
int res = 0;
while(d1 > 0) {
if(d1 >= d2) {
res++;
d1 -= d2;
}
else {
break;
}
}
if(dividend > 0 && divisor < 0)
return -res;
if(dividend < 0 && divisor > 0)
return -res;
return res;
}
Solution 2: Use the strategy by multiply 2 continually and statistic the number of occurence.
public int divide(int dividend, int divisor) {
long d1 = Math.abs((long)dividend);
long d2 = Math.abs((long)divisor);
if(dividend == -2147483648 && divisor == -1)
return 2147483647;
int res = 0;
while(d1 >= d2) {
int count = 0;
while(d2 << count <= d1) {
count++;
}
res += 1 << (count - 1);
d1 -= d2 << (count - 1);
}
if(dividend > 0 && divisor < 0)
return -res;
if(dividend < 0 && divisor > 0)
return -res;
return res;
}