代码:
class Solution {
public int divide(int dividend, int divisor) {
//转成long型,避免计算时整型溢出
long dividend1 = dividend, divisor1 = divisor;
long count = 0;
int flag = 1;
//将除数和被除数都转为非负数,方便计算
if (dividend1 < 0) {
dividend1 = -dividend1;
flag = -flag;
}
if (divisor1 < 0) {
divisor1 = -divisor1;
flag = -flag;
}
long result = divide(dividend1, divisor1);
result *= flag;
return result > Integer.MAX_VALUE || result < Integer.MIN_VALUE ? Integer.MAX_VALUE : (int) result;
}
private long divide(long dividend, long divisor) {
//终止条件
if (dividend < divisor)
return 0;
//倍增的结果
long sum = divisor;
//部分 商
long count = 1;
while (dividend >= sum) {
sum <<= 1;
count <<= 1;
}
//此时sum是大于dividend的,回退一步
sum >>= 1;
count >>= 1;
//返回部分商和未包括的被除数
return count + divide(dividend - sum, divisor);
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务