Leetcode divide two integers

本文介绍了一种在C++中实现整数除法的方法,通过位移操作来提高效率,并考虑了溢出的情况。该算法适用于32位整数运算。
class Solution {
public:
    int divide(int dividend, int divisor) {
        assert(divisor != 0);
        unsigned int divid, divis;
        divid = (dividend < 0) ? -dividend : dividend;
        divis = (divisor < 0) ? -divisor : divisor;
        if (divid < divis)
            return 0;
        int i;
        int ans = 0;
        unsigned long long tmp = divis;
        for (i = 0; tmp <= divid; i++)
            tmp <<= 1;
        // save overflow 
        // unsigned int MAX = 2^32 - 1
        if (UINT_MAX >> 1 < tmp) {
            ans += (1 << (i-1));
            divid -= (divis << (i-1));
            i--;
        }
        for (; divid >= divis && i; i--) {
            if ((divis << i) > divid && (divis << (i-1)) <= divid) {
                ans += (1 << (i-1));
                divid -= (divis << (i-1));
            }
        }
        return ((dividend > 0) ^ (divisor > 0))? -ans : ans;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值