【问题描述】一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2,…,9。给定表示书的总页码的10 进制整数n (1≤n≤109) 。编程计算书的全部页码中分别用到多少次数字0,1,2,…,9。
【样例输入】
11
【样例输出】
1
4
1
1
1
1
1
1
1
1
【解答】
#include<stdio.h>
int main()
{
int n,j;
scanf("%d",&n);
int a[10]={0};
int i;
for(j=1;j<=n;j++)
{
i=j;
while(i)//计算个位数字
{
if(i%10==0)
{
a[0]+=1;
}
if(i%10==1)
{
a[1]+=1;
}
if(i%10==2)
{
a[2]+=1;
}
if(i%10==3)
{
a[3]+=1;
}
if(i%10==4)
{
a[4]+=1;
}
if(i%10==5)
{
a[5]+=1;
}
if(i%10==6)
{
a[6]+=1;
}
if(i%10==7)
{
a[7]+=1;
}
if(i%10==8)
{
a[8]+=1;
}
if(i%10==9)
{
a[9]+=1;
}
i=i/10;//n缩小10倍
}
}
for(j=0;j<10;j++)
{
printf("%d\n",a[j]);
}
return 0;
}
时间复杂度为O(n*log(n))较高,还需优化