29 Divide Two Integers

/*
 * 思路:每次减轻一个除数会超时,所以要一次减去多个除数来加速
 * 注意:题中说“If it is overflow, return MAX_INT.”注意当数大于MAX_INT时进行处理
 * int 的范围为-2147483648~2147483647,而且Math.abs(-2147483648)的值还是-2147483648
 * 而Math.abs((long)-2147483648)输出的是2147483648

 */

public class Solution {
public int divide(int dividend, int divisor) {
int flag = 1;
if(dividend<0){
flag = -flag;
}
if(dividend>Integer.MAX_VALUE){
dividend = Integer.MAX_VALUE;
}
if(divisor<0){
flag = -flag;
}
if(divisor>Integer.MAX_VALUE){
divisor = Integer.MAX_VALUE;
}
long t1 = Math.abs((long)dividend);
long t2 = Math.abs((long)divisor);
long res = 0;
while(t1>=t2){
long t3 = t2;
for(int i=0;t1>=t3;++i,t3<<=1){
t1-=t3;
res+=(1<<i);
}
}
if(flag<0){
res = -res;
}
if(res>Integer.MAX_VALUE){
res = Integer.MAX_VALUE;
}
return (int)res;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值