一. Divide Two Integers
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
Difficulty:Medium
TIME:TIMEOUT
解法
實現整數的除法,不能用乘法除法以及取餘。因此就剩下加減法,用加減法當然可以,不過很明顯當被除數過大,除數過小的時候,就會超時。
因此只能採用其他的方法, 那就是移位。
對於正整數n來說:
- n << k相當於
n∗2k - n >> k相當於
n/2k
對於被除數dividend,以及除數divisor,有
int divide(int dividend, int divisor) {
if(dividend == INT32_MIN && divisor == -1)
return INT32_MAX;
bool sign = (dividend < 0) ^ (divisor < 0);
long ldividend = labs(dividend);
long ldivisor = labs(divisor);
int result = 0;
while(ldividend >= ldivisor) {
long k = ldivisor;
long l = 1;
while(ldividend >= (k << 1)) {
k = k << 1;
l = l << 1;
}
result += l;
ldividend -= k;
}
return sign ? -result : result;
}
代碼的時間複雜度爲