29. 两数相除
首先考虑边界情况,dividend为最小且divisor为最大的情况;以及divisor为1的情况。
然后做除法的时候,使用step+step的形式,类似于二分的方法,减少迭代的次数。
class Solution {
public:
int div(int a, int b){
if(a > b)return 0;
int res = 1, step = b;
while(a - step <= step){
step += step;
res += res;
}
return res + div(a - step, b);
}
int divide(int dividend, int divisor) {
if(dividend == INT_MIN && divisor == -1)return INT_MAX;
if(divisor == 1)return dividend;
int flag = 0;
if(divisor > 0)divisor = -divisor, flag ^= 1;
if(dividend > 0)dividend = -dividend, flag ^= 1;
return flag ? -div(dividend, divisor) : div(dividend, divisor);
}
};