Divide two integers without using multiplication, division and mod operator.
解答:
public int divide(int dividend, int divisor) {
boolean negative = (dividend<0 && divisor>0) ||
(dividend>0 && divisor<0);
int result = 0;
long div_dividend = Math.abs((long)dividend);
//Math.abs(-2147483648)的结果为-2147483648,这是因为溢出的原因,因此这里一定先要做类型转换才行
long div_divisor = Math.abs((long)divisor);
while(div_dividend >= div_divisor) {
int shift = 0;
while( (div_divisor<<shift) <= div_dividend ) {
++shift;
}
--shift;
result += (1<<shift);
div_dividend -= (div_divisor<<shift);
}
return negative? -result : result;
}
这道题一定要注意整数溢出的问题