本题源自leetcode 29
------------------------------------------------------
思路: 1 先判断溢出条件 1除数为0 2 被除数最小,切除数是-1
2 求除数和被除数是否同号
3 取 绝对值。除法运算相当于减法运算。每次,将除数左移 1位 相当于乘以 2.。减少做减法的次数。
代码:
int divide(int dividend, int divisor) {
if(!divisor || (dividend == INT_MIN && divisor == -1))
return INT_MAX;
int sign = ((divisor < 0) ^ (dividend < 0)) ? -1 : 1;
long long dvd = labs(dividend);
long long dvi = labs(divisor);
int res = 0;
while(dvd >= dvi){
long long tmp = dvi;
int count = 1;
while(dvd >= (tmp << 1)){
tmp = tmp << 1;
count = count << 1;
}
dvd -= tmp;
res += count;
}
return sign*res;
}