用移位和减法来算,需要考虑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);
}
};