@2024/4/1—力扣—两数相除

文章介绍了如何使用减法模拟整数除法的方法,针对负数情况进行了特殊处理,并通过`intfunc`函数实现基本操作,`intdivide`函数则考虑了除数为1或-1的边界情况,最后根据结果的正负性返回最终答案。
摘要由CSDN通过智能技术生成

代码实现:

思路:用减法模拟除法

// 用减法模拟除法
int func(int a, int b) { // a、b均为负数
    int ans = 0;
    while (a <= b) { // a的绝对值大于等于b,表示此时a够减
        int t = b;
        int count = 1; // 用来计数被减的次数
        // t >= INT_MIN / 2:防止减数越界,并且保证a的绝对值比两倍减数的绝对值大
        while (t >= INT_MIN / 2 && a <= t + t) {
            count += count;
            t += t;
        }
        ans += count;
        a -= t;
    }
    return ans;
}

int divide(int a, int b) {
    // 特殊情况,特殊处理
    if (a == INT_MIN && b == -1 || b == 0) {
        return INT_MAX;
    }
    if (a == INT_MIN && b == 1) {
        return INT_MIN;
    }
    // 标志位,储存运算结果的正负
    bool flag = true;
    // 将a、b统一转换为负数进行处理
    if (a > 0) {
        flag = !flag;
        a = -a;
    }
    if (b > 0) {
        flag = !flag;
        b = -b;
    }
    // 用减法模拟除法
    int ans = func(a, b);
    // 根据标志位判定结果的正负
    return flag ? ans : -ans;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值