【问题标题】:How can I underflow a number in constant time O(1)?如何在恒定时间 O(1) 中下溢一个数字?
【发布时间】:2021-12-06 07:37:16
【问题描述】:

我想创建一个“数据类型”,它会在恒定时间内发生下溢。 因此,如果您将10 作为上限,并传递值12,它会为您提供8

在以下代码中,max 是我的值 val 的上限。

while(val > max)
   val -= max;

目前我只有这个迭代代码,可以用模运算表示。我只是不知道怎么做。

6 的示例

【问题讨论】:

  • 这并不像预期的那样工作。它应该以(n = 10:4,n = 11:3,n = 12:2,n = 15:6)结束。您的解决方案为 12 生成 0。

标签: java integer-overflow


【解决方案1】:

val = val % max 有什么问题? (如果有,请举出更多反例。)

更新:假设图像中的 Boundmax 变量相同,您似乎想要表达式 max - (val - 1) % (max + 1)

【讨论】:

  • @xtay2 更新答案
  • 没关系,我有错字,谢谢
  • @xtay2 具有预期输出的单元测试对于此类任务将是更好的规范(而不是 imgur 图像)
  • n = 0 产生边界 + 1 btw。但我可以为此构建一个边缘案例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 2013-11-04
  • 2014-05-30
  • 2015-05-08
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多