一开始直接用循环减法,会超时,网上看了下,就是除数倍增的方法,这样复杂度由n变成lg n。中间还要注意负数溢出的情况,直接用long了。
public class Solution {
public int divide(int dividend, int divisor) {
// Start typing your Java solution below
// DO NOT write main() function
int ans = 0;
boolean sign = true;
if ((dividend >0 && divisor <0)
|| (dividend < 0 && divisor >0 )) sign = false;
long a = dividend;
long b = divisor;
if (a < 0) a = -a;
if (b < 0) b = - b;
while (a >= b)
{
int multi = 1;
long tmp = b;
while (a >= tmp) {
a -= tmp;
ans += multi;
tmp += tmp;
multi += multi;
}
}
if (!sign) return -ans;
else return ans;
}
}