Как выводить 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
}
Версия с операторами 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;
}
Ну если уж хочется максимально быстро, то скорее всего так: https://ideone.com/t5ZopF
int i;
START: for (i=1; ; i*=1000)
{
std::cout << i << std::endl;
if (i == 1000000) goto START;
}