0

我的 C++ 编程课作业有问题。

这是作业:

编写一个程序,读取行数并打印“n”行数字。

1

12

123

1234

12345

其中第 i 行是 1234 。. . k 其中 k = i mod 10。如果一行的位数超过 10,则 9 之后的数字应重新从 0 开始。例如,如果行数为 15,则输出应为:1

12

123

1234

12345

123456

1234567

12345678

123456789

1234567890

12345678901

123456789012

1234567890123

12345678901234

123456789012345

这是我到目前为止所拥有的:

#include <iostream>
using namespace std;

int main()
{
    int rows(0);
    int i(0);
    int j(0);

    cout << "Enter number of rows: ";
    cin >> rows;

    int k=rows;
    i=1;

    while (i <= rows)
    {  
        j=1;
        while(j <= i)
    {
        cout << j;
        j++;
    }
        cout << endl ;
        i++;
    }

    return (0);
}

在我到达第 10 行之前,这非常有效。我不知道如何让计数器重置回 0 并再次进入 1-9。我在猜测一个if声明,但我不知道如何正确实现它。任何帮助将不胜感激。

4

2 回答 2

4

使用将始终打印等于cout << j%10的个位数。j那么何时j = 10cout << j%10将打印0等。

于 2013-10-03T03:20:26.490 回答
2

稍微扩展另一个答案:

%称为余数运算符。它有时也称为“模数”或“模数”。它返回第一个参数除以第二个参数的余数。因此,对于这种情况,由于您希望数字介于 0 和 9 之间,请考虑当您拥有n % 10.

8 / 10 == 0 remainder 8
9 / 10 == 0 remainder 9
10 / 10 == 1 remainder 0
11 / 10 == 1 remainder 1
12 / 10 == 1 remainder 2

等等。

在 C++ 中,与大多数编程语言一样,您通常从 0 开始计数,并排除范围内的最终数字。因此,如果您有n % 56,则从 0 开始的输出将上升到 55,然后再次重置为 0。对此的经典论点由 Dijkstra 撰写:

http://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html

于 2013-10-03T03:29:39.523 回答