前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >29. 两数相除

29. 两数相除

作者头像
名字是乱打的
发布2022-05-13 08:42:04
5320
发布2022-05-13 08:42:04
举报
文章被收录于专栏:软件工程

一 题目:

二 思路:

采用二分法的思想,dividend每次减去2^n个divisor(尽可能多),同时reslut每次加2^n

三 代码:

代码语言:javascript
复制
class Solution {
    public int divide(int dividend, int divisor) {
        if (dividend==Integer.MIN_VALUE&&divisor==-1){
            return Integer.MAX_VALUE;
        }

        //判断符号是否一致
        //这里不能用两者的乘法做运算,因为可能会移除变负数;
        boolean same= (dividend>0&&divisor>0||dividend<0&&divisor<0)?true:false;

        // 将被除数和除数都转成正数或负数进行计算
        // 由于在Java中,当t=Integer.MIN_VALUE时(t取相反数依旧是它本身)此时可能存在越界问题,因此都用负数进行计算
        dividend=-Math.abs(dividend);
        divisor=-Math.abs(divisor);
        int res=0;
        while (dividend<=divisor){
            int temp=divisor;
            //记录有多少个divisor
            int count=1;
            //dividend每次减去2^n个divisor(尽可能多),同时reslut每次加2^n
            while (dividend-temp<=temp){
                //temp*2,count*2;
                temp=temp<<1;
                count=count<<1;
            }
            //减去2的n次方个divisor
            dividend=dividend-temp;
            res=res+count;
        }
        return same? res:-res;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 题目:
  • 二 思路:
  • 三 代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档