题目:
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
链接:Divide Two Integers
解法:将除法转换为减法,被除数每次减去的值翻倍,注意符号的变化和临界值处理。时间O(logn)
class Solution {
public :
int divide(int dividend, int divisor) {
int tag = 1;
long a = dividend;
long b = divisor;
if (divisor == 1) return dividend;
else if (divisor == -1) {
if (dividend == INT_MIN) return INT_MAX;
else return -dividend;
}
if (dividend >= 0 && divisor >= 0 || dividend <= 0 && divisor <= 0) tag = 1;
else tag = -1;
a = abs((long)a);
b = abs((long)b);
if (a < b) return 0;
int re = 0;
while (a >= b) {
int temp = 1;
long bt = b;
while (a >= bt << 1) {
bt = bt << 1;
temp = temp << 1;
}
re += temp;
a -= bt;
}
return re * tag;
}
};
Runtime: 19 ms