算法竞赛入门 第2版 习题3-3 UVa1225
思路是将小于n的数遍历,每次处理一个数,处理的情况是将这个数输出到字符串中,然后用switch语句统计出现的次数,代码如下
#include<stdio.h> #include<string.h> int main() { int T; scanf("%d", &T); while (T--) { int n=0, count1 = 0, count2 = 0, count3 = 0, count4 = 0, count5 = 0, count6 = 0, count7 = 0, count8 = 0, count9 = 0, count0 = 0; scanf("%d", &n); char buf[10]; for (int i = 1; i<=n; i++)//遍历n之前的数,每次处理一个数 { int temp = i, m = 1; while (temp ) { m++; temp = temp / 10; }//保存i的位数 sprintf(buf, "%d", i);//将i输入到字符串 for (int j = 0; j < m; j++) { switch (buf[j]) { case '0':{count0++; break; } case '1':{count1++; break; } case '2':{count2++; break; } case '3':{count3++; break; } case '4':{count4++; break; } case '5':{count5++; break; } case '6':{count6++; break; } case '7':{count7++; break; } case '8':{count8++; break; } case '9':{count9++; break; } }//记录i中每个数的个数 } } printf("%d %d %d %d %d %d %d %d %d %d\n", count0, count1, count2, count3, count4, count5, count6, count7, count8, count9); } return 0; }

浙公网安备 33010602011771号