原题:
解决方法:
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
解决方法:
除法的实现,关键在于大循环中的小循环,通过往左移1位倍增被除数来加快速度。
int divide(int dividend, int divisor) {
if (!divisor || (dividend==INT_MIN && divisor==-1))
return INT_MAX;
int flag = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;
long dvd = labs(dividend);
long dvs = labs(divisor);
int res = 0;
while(dvd >= dvs){
long temp = dvs;
int multiple = 1;
while(dvd>=(temp <<1)){
temp <<= 1;
multiple <<= 1;
}
res += multiple;
dvd -= temp;
}
return res * flag;
}