414. Divide Two Integers
int divide(int dividend, int divisor) {
// write your code here
if(divisor == 0){
return dividend > 0 ? INT_MAX : INT_MIN;
}
if(dividend == 0) {
return 0;
}
if(divisor == 1){
return dividend;
}
if(dividend == INT_MIN && divisor == -1){
return INT_MAX;
} //这个特例很奇怪,不容易想到
bool isNeg = ((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0));
long long a = abs((long long)(dividend));
long long b = abs((long long)(divisor));
long long res = 0;
while(a >= b){
int shift = 0;
while(a >= (b << shift)){
shift++;
}
a -= (b << (shift - 1));
res += (long long)(1 << (shift - 1));
}
return isNeg ? -res : res;
}
Comments
Post a Comment