栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LeetCode--29.两数相除

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode--29.两数相除

题目

解题方案

1、采用直接想减的方式进行处理

//直接相减,在leetCde中无法提交,提示超时
    public static int divide(int dividend, int divisor){
        int quotient = 0;
        boolean postiveNumber = true;
        if((dividend>0 && divisor<0) ||  (dividend<0 && divisor>0)){
            postiveNumber = false;
        }
        long absDividend = Math.abs((long)dividend);
        long absDivisor = Math.abs((long)divisor);
        while(absDividend >= absDivisor){
            absDividend -= absDivisor;
            quotient++;
            if(quotient >= Integer.MAX_VALUE){
                return Integer.MAX_VALUE;
            }
        }
        if(!postiveNumber){
            return -quotient;
        }
        return  quotient;
    }

2、使用移位运算实现计算

public static int divide1(int dividend, int divisor){
        //存放商数
        long quotient = 0;
        //返回结果值
        int result = 0;
        //判断返回结果是+/-
        boolean postiveNumber = true;
        //两种情况返回结果为-
        if((dividend>0 && divisor<0) ||  (dividend<0 && divisor>0)){
            postiveNumber = false;
        }
        //将除数和被除数进行取绝对值,转为long型防止-2^31绝对值后变为0.
        long absDividend = Math.abs((long)dividend);
        long absDivisor = Math.abs((long)divisor);
        //如果被除数小于除数,返回结果为0.
        if(absDividend= absDivisor) {
            long tmp = absDivisor,tempQuotient=1 ;
            
            while(absDividend >= tmp<<1){
                tmp<<=1;
                tempQuotient<<=1;
            }
            absDividend -= tmp;
            quotient += tempQuotient;

        }
        
        return result = postiveNumber? quotient>Integer.MAX_VALUE ? Integer.MAX_VALUE : (int)quotient : (int)-quotient;
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/318320.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号