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;
}
相关推荐
你怎么知道我是队长10 分钟前
C语言---枚举变量
c语言·开发语言
POLITE341 分钟前
Leetcode 23. 合并 K 个升序链表 (Day 12)
算法·leetcode·链表
会员果汁2 小时前
leetcode-动态规划-买卖股票
算法·leetcode·动态规划
橘颂TA2 小时前
【剑斩OFFER】算法的暴力美学——二进制求和
算法·leetcode·哈希算法·散列表·结构与算法
尋有緣4 小时前
力扣1355-活动参与者
大数据·数据库·leetcode·oracle·数据库开发
2401_876907525 小时前
USB TYPE-C 公头连接器设计规范总结:提升可靠性、降本增效的关键指南
c语言·开发语言·设计规范
Morwit5 小时前
*【力扣hot100】 647. 回文子串
c++·算法·leetcode
Illusionna.6 小时前
C 语言实现独立样本 t 检验和配对样本 t 检验
c语言·编程·统计·统计学·t-test·独立样本t检验·配对样本t检验
菜鸟233号6 小时前
力扣96 不同的二叉搜索树 java实现
java·数据结构·算法·leetcode
龚礼鹏6 小时前
Android应用程序 c/c++ 崩溃排查流程二——AddressSanitizer工具使用
android·c语言·c++