python - Python 中的溢出句柄

标签 python algorithm

正在处理以下算法难题,需要处理溢出情况。我对这一行 min(max(-2147483648, res), 2147483647) 感到困惑,如果有人可以评论它如何处理溢出,那就太好了。 :)

顺便说一句,我仍然很困惑为什么我们在做两个整数除法计算时在 Python 中会出现溢出?

发布详细的问题陈述和解决方案,

不使用乘法、除法和模运算符来除两个整数。

如果溢出,返回MAX_INT。

class Solution:
# @return an integer
def divide(self, dividend, divisor):
    positive = (dividend < 0) is (divisor < 0)
    dividend, divisor = abs(dividend), abs(divisor)
    res = 0
    while dividend >= divisor:
        temp, i = divisor, 1
        while dividend >= temp:
            dividend -= temp
            res += i
            i <<= 1
            temp <<= 1
    if not positive:
        res = -res
    return min(max(-2147483648, res), 2147483647)

最佳答案

min(max(-2147483648, res), 2147483647)

这是这两件事的结合:

result = max(-2147483648, res)
min(result, 2147483647)

函数maxmin分别返回传递给它们的最大和最小数量。

max() 的情况下如果res,请调用在-2147483648之上, 那么 res 的值被退回。否则,如果数字较小,则返回那个大的负数。这确保从 max() 返回的最小数字电话是-2147483648 .如果res越大越好,否则会以那个数为最低边界。

min() call 的作用恰恰相反。它建立了 2147483647 的最大边界如果 res 则返回该数字比它大。

结合起来,这些函数调用确保-2147483648 <= res <= 2147483647 .

最后请注意,在 Python 中,整数的大小并没有真正的限制。所以这些边界只是强制执行而实际上并不需要(至少对于 Python 而言),所以如果这是拼图解决方案所必需的,它可能是拼图的要求。

关于python - Python 中的溢出句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34262057/

相关文章:

python - 我真的改变了列表吗?

python - 使用Python利用爬取的数据

python - 加入多索引的pandas系列

string - 检查字符串的排列是否可以成为回文

python - Pandas 合并数据框创建 nan 列

python - 如何在子类中添加实例属性?

java - 如何存储和更改二维列表的值?

java - 二叉树的高度

algorithm - 为什么Eratosthenes算法的时间复杂度没有参数sqrt(n)?

algorithm - 用于主题建模的 Amazon Sagemaker 中的 LDA 和 NTM 有什么区别?