首页 >后端开发 >C++ >如何处理模运算中的负数以实现正确的数组索引?

如何处理模运算中的负数以实现正确的数组索引?

Barbara Streisand
Barbara Streisand原创
2025-01-13 13:27:42777浏览

How to Handle Negative Numbers in Modular Arithmetic for Correct Array Indexing?

模算术和负索引

负整数的标准模运算 (%) 在用于数组索引时可能会产生意外结果。 余数可能为负数,导致索引值无效。 为了确保正确的正数组索引,我们需要修改模函数。

常见的解决方案是使用以下公式:

<code>GetArrayIndex(i, arrayLength) = (i % arrayLength + arrayLength) % arrayLength</code>

这保证了 [0, arrayLength - 1] 范围内的正索引,无论输入 i 的符号如何。

自定义模函数

为了使代码更简洁,自定义 mod 函数会很有帮助:

<code class="language-java">public static int mod(int x, int m) {
    return (x % m + m) % m;
}</code>

此函数通过添加 m 来处理负余数,以确保得到正结果。

优化模函数

为了提高效率(更少的模运算),请考虑以下替代方案:

<code class="language-java">public static int mod(int x, int m) {
    int r = x % m;
    return r < 0 ? r + m : r;
}</code>

此版本直接检查余数r是否为负数,仅在必要时添加m

示例

使用自定义 mod 函数,我们可以获得预期的数组索引行为:

GetArrayIndex(4, 3) == 1 GetArrayIndex(3, 3) == 0 GetArrayIndex(2, 3) == 2 GetArrayIndex(1, 3) == 1 GetArrayIndex(0, 3) == 0 GetArrayIndex(-1, 3) == 2 GetArrayIndex(-2, 3) == 1 GetArrayIndex(-3, 3) == 0 GetArrayIndex(-4, 3) == 2

以上是如何处理模运算中的负数以实现正确的数组索引?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn