You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在O(1)常数时间内实现指定规则的数值下溢运算

常数时间模运算实现方案

你需要的反向溢出回绕运算可以通过模运算一步实现,时间复杂度为O(1),完全替代迭代逻辑,匹配你给出的「上限10传入12返回8」的规则:

// 入参:val 为输入数值,max 为设定的上限
int overflow_wrap(int val, int max) {
    if (val <= max) {
        return val;
    }
    int mod = val % max;
    return mod == 0 ? max : max - mod;
}

示例验证

  • 上限为10,输入12:12%10=2,返回10-2=8,符合预期
  • 上限为6,输入7:7%6=1,返回6-1=5,匹配你提供的上限6运算示例规则

如果需要更简洁的单行写法,也可以用如下兼容整数倍边界的实现:

int result = val <= max ? val : max - ((val - 1) % max);

如果你实际需要的是和你当前迭代代码逻辑一致的正向回绕(即上限10传入12返回2),可以使用更简单的模运算写法:

// 允许返回0的场景
int result = val % max;
// 要求返回值最小为1的场景
int result = val % max == 0 ? max : val % max;

内容的提问来源于stack exchange,提问作者user14978390

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:54:01