Как прокомментировал @ Weather Vane , используйте unsigned long long
с возможностью обрабатывать значения не менее 18,446,744,073,709,551,615 или 2 64 - 1.
int main(void) {
unsigned long long power = 0;
for (int i = 0; i <= 19; i++)
printf("%d %llu\n", i, power = power ? power*10 : 1);
return 0;
}
выход
0 1
1 10
2 100
...
17 100000000000000000
18 1000000000000000000
19 10000000000000000000
Или, если вам не нравятся жесткие строки инициализации кода, такие как "00000000000000000000"
, присвойте элементы в том же цикле.
Примечание "%.*s"
может печатать не- нулевой символ завершено char
массив.
#define MAX10POWER 30
int main(void) {
char zeros[MAX10POWER];
for (int i = 0; i <= MAX10POWER; zeros[i++] = '0')
printf("%d 1%.*s\n", i, i, zeros);
return 0;
}
выход
0 1
1 10
2 100
...
28 10000000000000000000000000000
29 100000000000000000000000000000
30 1000000000000000000000000000000
Или подлый вариант Флюгер хороший ответ, чтобы подняться до 21.
int main(void) {
for (unsigned long long power = 1, i = 0; i <= 21; i++, power *= 8)
printf("%lld %llo\n", i, power);
}