Распечатайте мощность 10 - Printf в C - PullRequest
0 голосов
/ 06 ноября 2018

Я должен распечатать полномочия 10 в диапазоне от 0-19. Проблема в том, что когда я хочу отобразить первую мощность, которая должна быть 1 (10^0), я просто не могу заставить printf не повторять 0 вообще. Мне разрешено использовать только один printf в моей программе и один { } блок (это основная функция).

#include <stdio.h>

int main(void) {
    int power = 19;
    for (int i = 0; i <= power; i++)
        printf("1%0*d\n",i, 0);
    return 0;
}

Мой вывод:

10 // this should be 1, but printf still puts 0 here
10
100
1000
10000
100000
1000000
10000000
100000000
1000000000
10000000000
100000000000
1000000000000
10000000000000
100000000000000
1000000000000000
10000000000000000
100000000000000000
1000000000000000000
10000000000000000000

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Как прокомментировал @ 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);
}
0 голосов
/ 06 ноября 2018

Вы можете достичь желаемого результата следующим образом:

#include <stdio.h>

int main(void) {
    unsigned long long power = 1;
    for (int i = 0; i <= 19; i++, power *= 10)
        printf("%llu\n", power);
    return 0;
}
0 голосов
/ 06 ноября 2018

Вместо использования %d используйте %s с переменной точностью и распечатайте его из строки нулей. Если точность равна 0, символы не печатаются.

#include <stdio.h>

int main(void) {
    int power = 19;
    char zeros[] = "00000000000000000000";
    for (int i = 0; i <= power; i++)
        printf("1%.*s\n",i, zeros);
    return 0;
}
...