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

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

Barbara Streisand
发布: 2025-01-13 13:27:42
原创
856 人浏览过

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 函数会很有帮助:

public static int mod(int x, int m) {
    return (x % m + m) % m;
}
登录后复制

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

优化模函数

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

public static int mod(int x, int m) {
    int r = x % m;
    return r < 0 ? r + m : r;
}
登录后复制

此版本直接检查余数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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板