用C打印10的幂-Printf

时间:2018-11-06 18:48:25

标签: c printing printf

我必须打印0到19的10的幂。问题是,当我想显示第一个功效(应该为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 :(得分:4)

使用%d而不是使用%s,而要使用精度可变的#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; } 并从零字符串中打印出来。如果精度为0,则不打印任何字符。

np.vectorize

答案 1 :(得分:2)

@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"可以打印以 null字符结尾的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

或者偷偷摸摸的Weather Vane好答案,直到21。

int main(void) {
  for (unsigned long long power = 1, i = 0; i <= 21; i++, power *= 8)
    printf("%lld %llo\n", i, power);
}

答案 2 :(得分:2)

您可以像这样获得所需的结果:

#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;
}