class Solution {
public:
int divide(int dividend, int divisor) {
bool flag = (dividend<0 && divisor>0) || (dividend>0 && divisor<0);
long long tmp1 = abs((long long)dividend);
long long tmp2 = abs((long long)divisor);
long long tmp3;
long long result=0;
long long multi;
while(tmp1 >= tmp2 ){
multi = 1;
tmp3 = tmp2;
while(tmp3+tmp3 <= tmp1){
multi += multi;
tmp3 += tmp3;
}
result += multi;
tmp1 -= tmp3;
}
return flag?(-1*result):(result>INT_MAX?INT_MAX:result);
}
};
两种思路,一个是一个除数一个除数的减,但是会超出时间限制,复杂度O(n)另外就是有多少个除数的倍数,例如1个除数,2个除数,4个除数。。。以此类推,然后减去最大的值,循环,复杂度O(logn)。
还有一点就是要注意溢出的问题[-2^31, 2^31-1]