算法竞赛入门 第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;
}

 

posted @ 2016-09-17 16:16  闫飞  阅读(159)  评论(0)    收藏  举报