代码拉取完成,页面将自动刷新
// Time: O(logn) = O(1)
// Space: O(1)
// Only using integer type.
class Solution {
public:
int divide(int dividend, int divisor) {
// Handle corner case.
if (dividend == numeric_limits<int>::min() && divisor == -1) {
return numeric_limits<int>::max();
}
int a = dividend > 0 ? -dividend : dividend;
int b = divisor > 0 ? -divisor : divisor;
int shift = 0;
while (b << shift < 0 && shift < 32) {
++shift;
}
shift -= 1;
int result = 0;
while (shift >= 0) {
if (a <= b << shift) {
a -= b << shift;
result += 1 << shift;
}
--shift;
}
result = (dividend ^ divisor) >> 31 ? -result : result;
return result;
}
};
// Time: O(logn) = O(1)
// Space: O(1)
// Using long long type.
class Solution2 {
public:
int divide(int dividend, int divisor) {
long long result = 0;
long long a = llabs(dividend);
long long b = llabs(divisor);
int shift = 31;
while (shift >= 0) {
if (a >= b << shift) {
a -= b << shift;
result += 1LL << shift;
}
--shift;
}
result = ((dividend ^ divisor) >> 31) ? -result : result;
return min(result, static_cast<long long>(numeric_limits<int>::max()));
}
};
// Time: O(logn) = O(1)
// Space: O(1)
// a / b = exp^(ln(a) - ln(b))
class Solution3 {
public:
int divide(int dividend, int divisor) {
if (dividend == 0) {
return 0;
}
if (divisor == 0) {
return numeric_limits<int>::max();
}
long long result = exp(log(fabs(dividend)) - log(fabs(divisor)));
result = ((dividend ^ divisor) >> 31) ? -result : result;
return min(result, static_cast<long long>(numeric_limits<int>::max()));
}
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。