Как выводить 3 числа 1, 1000, 1000000 по кругу в цикле?

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

1
1000
1000000
1
1000
1000000
1
1000
1000000
...

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

int i = 0;
for (;;) { // я бы не хотел трогать цикл
    i = (i + 1) % 4;
    std::cout << i << std::endl;

}

выдает такой результат:

0
1
2
3
4
0
1
2
3
4
0
1
....

Еще я смог сделать то что мне нужно но нагородил мне кажется много лишнего, я бы не хотел использовать массив.

int ar[]{1,1000,1000000};
int i = 0;
for (;;i = (i + 1) % 3) {
    
    std::cout << ar[i] << std::endl;

}

результат выдает то что нужно:

1
1000
1000000
1
1000
1000000
...

и т.д

это для меня не подходит, мне нужно каждый раз выдавать по 1 числу а не сразу 3

cout << 1 << endl << 1000 << endl << 1000000 << endl;

Ответы (4 шт):

Автор решения: Эникейщик

Примерно так (я с с++ не знаком и проверить не могу, поэтому пример на другом псевдоязыке):

for(;;) {
    i %= 3
    print (1000**i)
    i += 1
}
→ Ссылка
Автор решения: DSuhoi

Версия с операторами if - else. Пример:

for(;;){
    std::cout << i << std::endl;
    if(i < 1000000) i *= 1000;
    else i = 1;
}

Второй вариант:

for(;;){
        std::cout << i << std::endl;
        i = (i * 1000) % 1000000000;
        if(i == 0) ++i;
}

Третий (худший в плане читабельности) вариант:

#include <cmath>
...
for(;;){
        std::cout << exp(((i++) % 3) * log(1000)) << std::endl;
}
→ Ссылка
Автор решения: Qwertiy

Ну если уж хочется максимально быстро, то скорее всего так: https://ideone.com/t5ZopF

int i;

START: for (i=1; ; i*=1000)
{
  std::cout << i << std::endl;
  if (i == 1000000) goto START;
}
→ Ссылка
Автор решения: Александр
for(int i=1; i<1000000;)
{
  cout<<i<<"/n";
  i*=1000;
}

Вот так)

→ Ссылка