基本概念

取模运算返回两个数相除后的余数。例如,7 % 3的结果是1,因为7除以3得到2余1。这个操作的关键在于,它总是返回一个小于除数的非负整数,这使得它非常适合用于循环和周期性场景。

循环

在循环场景中,取模运算确保数值能够在达到一个上限后回绕到开始。想象一下你有一个时钟,时钟的数字是从1到12。如果时针指向12,下一个小时时针应该回到1。这可以通过取模运算表达为(当前小时数 % 12) + 1。同样的逻辑可以应用于数组索引、循环队列等场景。

时钟的例子

假设你有一个时钟,这个时钟是12小时制的。时钟的数字是从1到12的。如果现在是早上8点,8小时后是下午4点,而不是20点,因为时钟会在达到12之后回到1开始新的循环。我们如何用数学来表示这个过程呢?

如果你想知道8小时后是几点,你会计算 (当前时间 + 8) % 12。如果当前是8点,那么 (8 + 8) % 12 = 16 % 12 = 4。这就是为什么8小时后是下午4点的原因。

数学原理

取模运算%是整数除法的余数。例如,5 % 2等于1,因为5除以2等于2余1。

在循环场景中,取模运算用于将任意大的数字转换为一个固定范围内的数字。这个固定范围是从0到模数-1(在时钟的例子中模数是12,因为有12个小时)。

应用于数组和循环队列

当你有一个数组或循环队列,并且需要循环访问其中的元素时,取模运算同样适用。比如,你有一个包含10个元素的数组(索引从0到9),你需要从任意位置开始,循环访问数组中的元素。

如果你从索引6开始,并且想要访问接下来的5个元素,直接加索引会导致超出数组边界(6 + 5 = 11,而数组的最大索引是9)。使用取模运算可以帮助你解决这个问题: (6 + 5) % 10 = 11 % 10 = 1 这意味着从索引6开始访问5个元素后,你会回到数组的索引1,恰好模拟了循环访问的