这种题目多考虑变成long,扩大精度
class Solution {
public int divide(int dividend, int divisor) {
long result = divideLong(dividend, divisor);
return result > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) result;
}
public long divideLong(long dividend, long divisor) {
boolean flag = dividend <0 != divisor <0;
if(dividend < 0) dividend = - dividend;
if(divisor<0) divisor = -divisor;
if(dividend < divisor) return 0l;
long sum = divisor;
int num = 1;
while((sum + sum) < dividend) {
num += num;
sum += sum;
}
return flag?-num-divideLong(dividend-sum, divisor):
num+divideLong(dividend-sum,divisor);
}
}
网友评论