如何在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
相关产品推荐
相关产品推荐

