我必须打印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
答案 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;
}