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;
}
相关推荐
x_xbx19 分钟前
LeetCode:2. 两数相加
算法·leetcode·职场和发展
_日拱一卒1 小时前
LeetCode:最长连续序列
算法·leetcode·职场和发展
重生之后端学习1 小时前
287. 寻找重复数
数据结构·算法·leetcode·深度优先·图论
炘爚1 小时前
C语言(const的指针定义的区别)
c语言
Z9fish2 小时前
sse哈工大C语言编程练习47
c语言·数据结构·算法
本喵是FW3 小时前
C语言手记2
c语言·开发语言
实心儿儿3 小时前
算法7:两个数组的交集
算法·leetcode·职场和发展
sheeta19983 小时前
LeetCode 每日一题笔记 日期:2025.03.19 题目:3212.统计X和Y频数相等的子矩阵数量
笔记·leetcode·矩阵
计算机安禾3 小时前
【C语言程序设计】第34篇:文件的概念与文件指针
c语言·开发语言·数据结构·c++·算法·visual studio code·visual studio
Storynone4 小时前
【Day28】LeetCode:509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
python·算法·leetcode