LCR001-两数相除

求解代码

java 复制代码
    //定义移位边界,防止左移溢出
    private static final int BOUND = Integer.MIN_VALUE>>1;

    //被除数是最小负数,除数是-1,返回最大正数
    public int divide(int a,int b){
        if(a==Integer.MIN_VALUE&&b==-1){
            return Integer.MAX_VALUE;
        }

        if(a==0||b==1){
            return a;
        }else if(b == -1){
            return -a;
        }

        int negative = 2;
        // 统一转为负数计算,避免MIN_VALUE取反溢出
        if(a>0){
            negative--;
            a=-a;
        }

        //仅处理a、b均为负数的情况,返回正的商
        if(b>0){
            negative--;
            b=-b;
        }

        int ans = helpDivide(a,b);
        return negative == 1 ? -ans : ans;
    }

    private int helpDivide(int a,int b){
        // 被除数绝对值 == 除数绝对值,商为1
       if(a==b){
        return 1;
       } 
       int res = 0;
       int shift = getMaxShift(a,b);
       while(a<=b){
        while (a>(b<<shift)) {
            shift--;
        }
        a-=(b<<shift);// 减去 b×2^shift
        res+=(1<<shift);// 商累加 2^shift
       }
       return res;
    }

    // 获取除数b的最大有效移位次数
    private int getMaxShift(int a,int b){
        int shift = 0;
        int tmp = b;

        while(tmp>a && tmp>=BOUND){
            tmp<<=1;
            shift++;
        }
        return shift;
    }

小贴士

必须以除数 为起点左移(倍增),而非被除数

Integer.MIN_VALUE = -2^31 取反会溢出。

两个负数相比较时,a更小表示绝对值更大。

相关推荐
551只玄猫34 分钟前
【数学建模 matlab 实验报告12】聚类分析和判别分析
开发语言·数学建模·matlab·课程设计·聚类·实验报告
小陈工2 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
H Journey3 小时前
C++之 CMake、CMakeLists.txt、Makefile
开发语言·c++·makefile·cmake
一定要AK7 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao7 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
KevinCyao7 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
lly2024067 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨7 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9997 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏4947 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源