C语言 | Leetcode C语言题解之第29题两数相除

题目:

题解:

cpp 复制代码
int divide(int dividend, int divisor){
    int cnt = 0;
    int sign = 1;
    if ((dividend ^ divisor) < 0) { // 两数任意一个为负数
        sign = -1;
    }
    if (divisor == INT_MIN) { // 除数边界值特殊处理
        if (dividend == INT_MIN) {
            return 1;
        } else {
            return 0;
        }
    }
    if (dividend == INT_MIN) { // 被除数边界值特殊处理
        if (divisor == -1) {
            return INT_MAX;
        } else if (divisor == 1) {
            return INT_MIN;
        }
        dividend += abs(divisor); // 先执行一次加操作,避免abs转换溢出
        cnt++;
    } 
    int a = abs(dividend);
    int b = abs(divisor);
    while (a >= b) {
        int c = 1;
        int s = b;
        // 需指数级快速逼近,以避免执行超时
        while (s < (a >> 1)) { // 逼近至一半,同时避免溢出
            s += s;
            c += c;
        }
        cnt += c;
        a -= s;
    }
    return (sign == -1) ? -cnt : cnt;
}
相关推荐
小强不秃头几秒前
Linux C——网络编程
linux·c语言·开发语言
Catalany4 分钟前
Leetcode134 加油站 - 贪心!
leetcode·贪心算法
wwangxu1 小时前
C语言 编译和链接
c语言·开发语言
bigjordon2 小时前
关于使用/bin/sh -c 用于Dockerfile的Entrypoint的问题
c语言·开发语言·chrome
Beginner_bml2 小时前
Web服务器
服务器·c语言·网络协议
7yewh2 小时前
C语言刷题 LeetCode 30天挑战 (五)贪心算法
linux·c语言·开发语言·c++·算法·leetcode·贪心算法
mirevass2 小时前
【嵌入式软件-数据结构与算法】01-数据结构
c语言·数据结构·链表··队列
MikelSun2 小时前
梳理一下C语言中的格式说明符
c语言·开发语言·c++·单片机·物联网·算法
running_bug_Hu2 小时前
深度优先算法与拓扑排序之间的关系(C语言)
c语言·算法·深度优先
__AtYou__3 小时前
Golang | Leetcode Golang题解之第437题路径总和III
leetcode·golang·题解