Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
这题运用移位轻松解决,但是要注意是否会溢出,在会不会溢出这里我卡了好久。
int占4字节,表示范围为-2^31 ~ 2^31-1。
程序首先要将除数与被除数都变成正数,当这两个数中有一个数为int_min的时候,取反直接溢出,所以在取反前就得强制转换为long
结果计算完成之后判断是否溢出再做相应处理。
下面该题目的java代码实现。
public class Solution {
public int divide(int dividend, int divisor) {
long a = dividend >=0 ? dividend : -(long)dividend;
long b = divisor >=0 ? divisor : -(long)divisor;
long result = 0;
while(a >= b){
long c = b ;
for(int i = 0 ; a >= c ;i++, c<<=1){
a -= c;
result += (1 << i);
}
}
if((dividend^divisor)>>31 != 0)
result = - result;
if(result > Math.pow(2, 31) -1)
return (int)(Math.pow(2, 31) -1);
else if(result < -Math.pow(2, 31))
return -(int)Math.pow(2, 31);
else
return (int)result;
}
}