模数(%)在编程中的实际用途是什么?

kof*_*cii 11 operators modulo

可能重复:
识别何时使用mod运算符

模数的实际用途是什么?我知道模数除法是什么.我想到的第一个场景是使用它来查找奇数和偶数,以及时钟算术.但在哪里我可以使用它?

Pet*_*der 23

我发现最常见的用途是"包裹"你的数组索引.

例如,如果您只想重复循环一个数组,可以使用:

int a[10];
for (int i = 0; true; i = (i + 1) % 10)
{
  // ... use a[i] ...
}
Run Code Online (Sandbox Code Playgroud)

模数确保i保持在[0,10]范围内.

  • 我想不出这种无限循环的任何有用用途,但它看起来很酷。 (2认同)

ken*_*ytm 6

要将数字打印为字符串,您需要使用模数来查找数字的值.

string number_to_string(uint number) {
  string result = "";
  while (number != 0) {
    result = cast(char)((number % 10) + '0') ~ result;
    //                   ^^^^^^^^^^^
    number /= 10;
  }
  return result;
}
Run Code Online (Sandbox Code Playgroud)


Gen*_*son 6

我通常在紧密循环中使用它们,当我必须在每个X循环中执行某些操作而不是在每次迭代时.

例:

int i;
for (i = 1; i <= 1000000; i++)
{
   do_something(i);
   if (i % 1000 == 0)
       printf("%d processed\n", i);
}
Run Code Online (Sandbox Code Playgroud)

  • 在某些实现中,这可能非常昂贵。 (3认同)

Don*_*ows 5

模数运算的一个用途是在制作哈希表时.它用于将哈希函数的值转换为数组的索引.(如果哈希表大小是2的幂,则可以使用位掩码完成模数,但它仍然是模数运算.)


小智 5

对于国际银行账号的控制号,mod97技术

也可以大批量的做一些n迭代之后的事情。这是NHibernate的示例:

ISession session = sessionFactory.openSession();
ITransaction tx = session.BeginTransaction();

for ( int i=0; i<100000; i++ ) {
    Customer customer = new Customer(.....);
    session.Save(customer);
    if ( i % 20 == 0 ) { //20, same as the ADO batch size
        //Flush a batch of inserts and release memory:
        session.Flush();
        session.Clear();
    }
}

tx.Commit();
session.Close();
Run Code Online (Sandbox Code Playgroud)