如何在整数算术中执行上限除法? [复制]

Posted

技术标签:

【中文标题】如何在整数算术中执行上限除法? [复制]【英文标题】:How to perform ceiling-division in integer arithmetic? [duplicate] 【发布时间】:2015-10-23 09:32:29 【问题描述】:

它基本上是返回 box_needed。 1 个盒子可以包含 10 件物品。因此,如果用户键入的项目是 102,那么代码应该返回 11 个框。

如果有非零余数,有没有办法向上舍入?

【问题讨论】:

这就是你想要的ceil(10.4) 使用“将地板除法转换为天花板除法运算符”,拼写为“--0--” 用法示例:--0-- 102//10 -> 11。 (试试看!)</tongue-in-cheek>。更严重的是,这只是 Stefan Pochmann 答案的变体,它不仅为整数提供了正确的结果,而且还正确扩展到其他数字类型,例如 floatFraction 对于解析这个的其他人:它解析为- (-0) - (-102)//10。使用0-- 102//10 可以达到相同的效果。 --102//10 失败,因为它解析为 (- ( - 102)) // 10 【参考方案1】:

对于您的用例,请使用整数算术。有一种简单的技术可以将整数地板除法转换为天花板除法:

items = 102
boxsize = 10
num_boxes = (items + boxsize - 1) // boxsize

或者,使用否定将地板分割转换为天花板分割:

num_boxes = -(items // -boxsize)

【讨论】:

我认为我们的讲师希望我们使用这种技术而不是使用 ceil,因为 ceil 尚未在讲座中介绍。谢谢:) 这个答案对我来说不是很清楚 - 可能是因为问题不是很清楚,也许这有助于澄清显示的内容,使用上面变量名称的值,102 / 10 是 10.2 ;使用整数除法,102 // 10 是 10,但是在不使用数学库或浮点数的情况下向上舍入到 11 则上述任一解决方案都有效,因此这两个都将给出 11:(102 + 10 - 1) // 10或 -(102 // -10) 如果您需要了解为什么需要 -1,请考虑 100 和 101 会发生什么【参考方案2】:

前后取反?

>>> -(-102 // 10)
11

【讨论】:

我认为这个解决方案比“添加分母 - 1”的解决方案更好,因为它无需修改即可扩展到浮点数。【参考方案3】:
from math import ceil

print(ceil(10.3))

11

【讨论】:

不要那样做!一旦你使用浮点运算,你就会让不准确的恶魔进来。它可以在正常用例中工作,但如果你开始使用长数字(二进制​​表示中超过 48 位)整数不能用 IEE-754 精确表示双精度数。 我会记住这一点【参考方案4】:

你可以试试:

import math
math.ceil( x )

【讨论】:

以上是关于如何在整数算术中执行上限除法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中进行整数除法(在int中获取除法答案而不是float)? [复制]

如何在 Java 中舍入整数除法并获得 int 结果? [复制]

计算机如何实现运算?

如何确定涉及c ++中除法的算术表达式的数据类型

C语言操作符

如何在 Python 中打印大量数字? [复制]