36

假设我需要格式化数组的输出以每行显示固定数量的元素。我该如何使用模数运算来做到这一点?

使用 C++,下面的代码适用于每行显示 6 个元素,但我不知道它是如何工作的以及为什么工作?

for ( count = 0 ; count < size ; count++)
{
    cout << somearray[count];
    if( count % 6 == 5) cout << endl;
}

如果我想每行显示 5 个元素怎么办?我如何找到所需的确切表达式?

4

5 回答 5

42

在 C++ 中,表达式a % b返回 a 除以 b 的余数(如果它们是正数。对于负数,结果的符号由实现定义)。例如:

5 % 2 = 1
13 % 5 = 3

有了这些知识,我们可以尝试理解您的代码。条件count % 6 == 5意味着当除以 6 的余数为 5 时将写入换行符。这种情况多久发生一次?正好相隔 6 行(练习:写下数字 1..30 并在满足此条件的数字下划线),从第 6 行开始(计数 = 5)。

要从您的代码中获得所需的行为,您应该将条件更改为count % 5 == 4,从第 5 行(计数 = 4)开始每 5 行换行一次。

于 2012-09-23T22:58:31.267 回答
7

基本上,模数运算符为您提供简单的余数数学示例 11 除以 3 的余数/余数是多少?答案是 2

对于同样的事情 C++ 有 模运算符 ('%')

基本解释代码

#include <iostream>
using namespace std;


int main()
{
    int num = 11;
    cout << "remainder is " << (num % 3) << endl;

    return 0;
}

哪个会显示

余数为 2

于 2017-10-10T10:11:23.537 回答
3

它为您提供除法的其余部分。

int c=11, d=5;
cout << (c/d) * d + c % d; // gives you the value of c
于 2012-09-23T22:52:54.517 回答
3

这个 JSFiddle 项目可以帮助您了解模数的工作原理:http: //jsfiddle.net/elazar170/7hhnagrj

模数函数的工作原理如下:

     function modulus(x,y){
       var m = Math.floor(x / y);
       var r = m * y;
       return x - r;
     }
于 2016-07-18T07:55:55.693 回答
2

您可以将模运算符视为给您一个余数。count % 6 尽可能多地将 6 除以 count 并给出从 0 到 5 的余数(这些都是可能的余数,因为您已经尽可能多地除以 6)。数组的元素都在for循环中打印出来,但是每次余数为5(每第6个元素),就输出一个换行符。这为您提供每行 6 个元素。对于每行 5 个元素,使用

如果(计数 % 5 == 4)

于 2012-09-23T22:56:27.447 回答