LeetCode #29 Divide Two Integers
作者:
刘煌旭 | 来源:发表于
2021-04-17 02:01 被阅读0次

Divide.png
/*
* F**K the corner cases...
*/
int negate(int i) { return (~(i)+1); }
int divide(int dividend, int divisor) {
if (divisor == dividend) return 1;
if (divisor == 1) return dividend;
if (divisor == -1) return dividend == INT_MIN ? INT_MAX : negate(dividend);
if (dividend == 0) return 0;
int pow = 1, shifts = 1, nd = divisor > 0 ? divisor : (divisor != INT_MIN ? negate(divisor) : 3);
while (shifts < 32 && pow < nd && (pow <= INT_MAX >> shifts) && (pow <<= shifts) != nd) shifts++;
if (dividend > 0 && divisor > 0) {
if (pow == divisor) { return dividend >> shifts; }
int ret = 0;
while ((dividend -= divisor) >= 0) {
if (ret == INT_MAX) {
return INT_MAX;
} else {
ret++;
}
}
return ret;
} else if (dividend > 0 && divisor < 0) {
if (pow == nd) { return negate(dividend >> shifts); }
int ret = 0;
while ((dividend += divisor) >= 0) {
if (ret == INT_MIN) {
return INT_MIN;
} else {
ret--;
}
}
return ret;
} else if (dividend < 0 && divisor > 0) {
if (pow == nd) { return dividend >> shifts; }
int ret = 0;
while ((dividend += divisor) <= 0) {
if (ret == INT_MIN) {
return INT_MIN;
} else {
ret--;
}
}
return ret;
} else {//all < 0
if (pow == nd) { return negate(dividend) >> shifts; }
int ret = 0;
while ((dividend -= divisor) <= 0) {
if (ret == INT_MAX) {
return INT_MAX;
} else {
ret++;
}
}
return ret;
}
}
本文标题:LeetCode #29 Divide Two Integers
本文链接:https://www.haomeiwen.com/subject/tutulltx.html
网友评论