[leetcode]029-Divide Two Integers[数学逻辑]

1. 原题

https://leetcode.com/problems/divide-two-integers/

2. 思路

题意:要求不能使用乘除和取余,求出商值。

中等难度。可以回想出计算机是如何乘除的--利用移位。

这里,我们同样也可以利用移位得出。为了便于处理边界,

先将int转成长整型的绝对值,防止溢出。

3. 源码

class Solution {
public:
    int divide(int dividend, int divisor) {
        if (dividend == INT_MIN && divisor == -1)
            return INT_MAX;
        
        long long div = abs((long long)dividend);
        long long dis = abs((long long)divisor);
        long long res = 0;
        while (div >= dis)
        {
            long long qt = 1, dd = dis;
            while (div >= dd) //移位累加商
            {
                res += qt;
                div -= dd;
                dd <<= 1; //左移一位表示2倍
                qt <<= 1;
            }
        }
        
        if ((dividend^divisor) < 0) //异号
            return -res;
        else return res;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值