前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Leetcode][python]Divide Two Integers

[Leetcode][python]Divide Two Integers

作者头像
蛮三刀酱
发布2019-03-26 15:35:27
3470
发布2019-03-26 15:35:27
举报

题目大意

除法运算,但是不能用编程语言提供的乘法、除法和取模运算,即只能用加法和减法实现。

解题思路

https://cloud.tencent.com/developer/article/1406942

代码

class Solution(object):
    def divide(self, dividend, divisor):
        """
        :type dividend: int
        :type divisor: int
        :rtype: int
        """
        MAX_INT = 2147483647
        sign = 1 if (dividend > 0 and divisor > 0) or (dividend < 0 and divisor < 0) else -1
        quotient = 0
        dividend = abs(dividend)  # 被除数
        divisor = abs(divisor)  # 除数
        while dividend >= divisor:
            k = 0
            tmp = divisor
            # 减去1,2,4,8逐渐加速,直到被除数小于除数,然后出内部while,k置为0,再重新加速。最终等到直接小于被除数
            while dividend >= tmp:
                dividend -= tmp
                quotient += 1 << k
                tmp <<= 1
                k += 1
        quotient  = sign * quotient
        if quotient > MAX_INT:
            quotient = MAX_INT
        return quotient

补充思路

https://blog.csdn.net/zdavb/article/details/47108505

计算机计算除法

计算机计算除法的过程与人类计算的过程很类似,只是选择范围变成了0或1.

还以51/3为例说明(51:110011;3:11)

从第一位开始为1,小于11,结果位置0;余数为1

从第二位开始,余数*2+1=11,等于11,结果位置1,余数为0;

从第三、四位开始,余数*2+0=0<011,结果位置0,余数为0

从第5位开始,余数*2+1=1<11,结果置0,余数为1

从第6位开始,余数*2+1=11=11,结果置1,余数为0.

此时将结果位相连,恰好是10001(17)

总结

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年03月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目大意
  • 解题思路
  • 代码
    • 补充思路
    • 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档