напечатать серию цифр оптимизации часть 1 - PullRequest
0 голосов
/ 24 апреля 2011

Допустим, вы хотите создать программу, которая будет печатать числа 1-9 снова и снова

123456789123456789123456789

Я думаю, что наиболее очевидный способ сделать это - использовать цикл

int number = 1;
while(true)
{
    print(number);
    number = number + 1;
    if(number > 9)
        number = 1;
}

Прежде чем я продолжу, это лучший способ сделать это или есть более распространенный способ сделать это?

Ответы [ 5 ]

8 голосов
/ 24 апреля 2011

Будет ли это делать?

while(true)
{
    print("123456789");
}
1 голос
/ 24 апреля 2011

Каждый, кто до сих пор использует оператор %, похоже, испытывает впечатление, что задействованы десять значений. Они также упускают из виду тот факт, что их логика иногда генерирует 0. Один из способов сделать то, что вы хотите, это:

int i = 1;
while (true) {
    print(i);
    i = (i % 9) + 1;
}
1 голос
/ 24 апреля 2011

Самый очевидный способ был бы таков:

for (;;)
{
    for (int i = 1; i < 10; ++i)
    {
        print(i);
    }
}

Почему вы хотите дать понять, что это вне меняВыходные данные будут настолько перегружать вычисления, что любой вид оптимизации не будет иметь значения.

1 голос
/ 24 апреля 2011

Мой ответ основан на ответе Майка, но с дальнейшей оптимизацией:

for (int i = 1; true; i++)
{
    std::cout << ('0' + i);
    i = (i + 1) % 10;
}

Печать числа намного дороже, чем печать символа и сложения.

1 голос
/ 24 апреля 2011

Прежде всего, почему вы пытаетесь "оптимизировать" это? Вы оптимизируете скорость? Космос? Читабельность или ремонтопригодность?

"Более короткий" способ сделать это будет выглядеть так:

for (int i = 1; true; i++)
{
    print(i);
    i = (i + 1) % 10;
}

Все, что я сделал, было:

  1. Конвертировать цикл while в for петля
  2. Преобразование приращения + условно увеличивать + мод работа.

Это действительно случай микрооптимизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...