Divide two integers without using multiplication, division and mod operator.
注意负数转换为正数时会发生溢出。
class Solution {
public:
int divide(int dividend, int divisor) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
assert(divisor != 0);
if (dividend == 0) return 0;
int sig = 1;
if (dividend < 0)
{
sig = ~sig + 1;
}
if (divisor < 0)
{
sig = ~sig + 1;
}
long long ldi = abs((long long)dividend);
long long lds = abs((long long)divisor);
long long count = 1;
long long num = lds;
while(num < ldi)
{
num <<= 1;
count <<= 1;
}
int result = 0;
while(num >= lds)
{
while(ldi >= num)
{
ldi -= num;
result += count;
}
num >>= 1;
count >>= 1;
}
return sig*result;
}
};