用移位和减法来算,需要考虑Int能取到的所有范围:
#define MIN_VALUE -2147483648
#define MAX_VALUE 2147483647
class Solution {
public:
int divide(int dividend, int divisor) {
// Note: The Solution object is instantiated only once.
if(dividend == MIN_VALUE && (divisor == 1 || divisor == -1)){
return divisor == 1 ? MIN_VALUE : MAX_VALUE;
}
long long a = abs((double)dividend);
long long b = abs((double)divisor);
long long res = 0;
while(a >= b)
{
long long c = b;
for(int i = 0; a >= c; i++, c <<=1)
{
a -= c;
res += 1<<i;
}
}
return ((dividend ^ divisor) >> 31) ? (-res) : (res);
}
};

本文介绍了一种使用移位和减法实现整数除法的算法,该算法能够处理包括最小整数值在内的所有整数范围。通过不断左移除数并从被除数中减去除数的方法来快速计算商,最后根据输入符号确定最终结果的正负。
484

被折叠的 条评论
为什么被折叠?



