% 运算符(模、余数)如何工作?

问题描述 投票:0回答:5

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

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

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

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

c++ modulo
5个回答
45
投票

在 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 行提供换行符。


8
投票

基本上模数运算符可以给你余数 简单的数学例子 11 除以 3 剩下多少?答案是2

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

解释的基本代码

#include <iostream>
using namespace std;


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

    return 0;
}

将会显示

余数为2


4
投票

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

模函数的工作原理如下:

     function modulus(x,y){
       var m = Math.floor(x / y);
       var r = m * y;
       return x - r;
     }

3
投票

它给你除法的余数。

int c=11, d=5;
cout << (c/d) * d + c % d; // gives you the value of c

2
投票

您可以将模运算符视为给您余数。 count % 6 将 count 中的 6 尽可能多地除掉,并给出 0 到 5 之间的余数(这些是所有可能的余数,因为您已经尽可能多地除掉了 6 次)。数组的元素全部在 for 循环中打印,但每次余数为 5(每第 6 个元素)时,它会输出一个换行符。这将为您提供每行 6 个元素。对于每行 5 个元素,请使用

如果(计数% 5 == 4)

© www.soinside.com 2019 - 2024. All rights reserved.