LeetCoder 29. Divide Two Integers

题意

计算两个数相除,要求不能使用除法

思路

不能使用除法,但是可以使用减法来实现,如果使用普通的减法会超时,所以可以采用倍增的方法,例如:
计算 dividenddivisor
利用 2ndivisor ,通过对 n 进行倍增来寻找divisor的个数,每次 n 加一,如果小于了dividend,那么 n 从1开始继续找,直到找完.

需要注意的case

  • 取绝对值之后 int 溢出
  • divisor 为-1的时候的溢出情况

代码

class Solution {
public:
    int divide(int dividend, int divisor) {
        size_t flag = 1;
        if(divisor == 0) return INT_MAX;
        if(dividend == INT_MIN && divisor == 1) return INT_MIN;
        if(dividend == INT_MIN && divisor == -1) return INT_MAX;
        if(dividend < 0) flag = -1;
        if(divisor < 0){
            if(flag == -1) flag = 1;
            else flag = -1;
        }
        long long up = abs((long long)dividend);
        long long down = abs((long long)divisor);
        long long cnt = 0;
        while(up >= down)
        {
            long long num = 1;
            while(up >= (num * down))
            {
                up -= num * down;
                cnt += num;
                num *= 2;
            }
        }
        return cnt * flag;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值