Leetcode初学——两数相除

题目:

这道题目,表面上很简单,实际上却给我挖了个大坑

问题在什么地方呢?

就是他的特殊情况的判定

由于题目要求,我们的环境只能存储32位有符号整数,也就是说我们不能使用long型,只能用int型,因此而可能引发一系列的错误

先上代码:

class Solution {
    public int divide(int dividend, int divisor) {
        //特殊情况只会在dividend==Integer.MIN_VALUE时出现
        if(dividend==Integer.MIN_VALUE){
            if(divisor==1) return Integer.MIN_VALUE;
            if(divisor==-1) return Integer.MAX_VALUE;
        }
        int flag=-1;
        if((dividend>0 && divisor>0) || (dividend<0 && divisor<0))  flag=1;
        //这里将两个数都转换为负数是为什么呢?
        //因为负数的空间比整数的大1,可以避免很多可能超出范围的情况
        dividend=-Math.abs(dividend);
        divisor=-Math.abs(divisor);
        int res=0;
        while(dividend<0){
            dividend-=divisor;
            if(dividend>0) break;
            res++;
        }
        return res*flag;
    }
}

运行结果也是极其低下

 

如果大佬们有更优秀的方法的话,欢迎交流

 

我先在角落画画圆圈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值