2.递归
#include <stdio.h>
#include <stdlib.h>
void Countshu(int page,int num[]);
int wei(int n); //计算最高位是多少
int maxzui(int n); //最高位数字是多少
int yushu(int n); //除去最高位,余数是多少
int fn(int n); //计算0-9相同次数
int zero(int n); //计算多余0的个数
int main()
{
int page,i;
while(1)
{
printf("输入页数");
scanf("%d",&page);
if(page==0)
break;
int num[10]={0};
Countshu(page,num);
for(i=0;i<=9;i++)
{
printf("%d\n",num[i]);
}
}
}
int wei(int n)
{
int a=0;
while(n)
{
n/=10;
a++;
}
return a;
}
int maxzui(int n)
{
return n/(int)pow(10,wei(n)-1);
}
int yushu(int n)
{
return n%(int)pow(10,wei(n)-1);
}
int fn(int n)
{
return n*(int)pow(10.0,n-1);
}
int zero(int n)
{
return (1-(int)pow(10.0,wei(n)))/(1-10);
}
void Countshu(int page,int num[])
{
int i;
int n = wei(page);
int m = maxzui(page);
int m1 = yushu(page);
int x = fn(n-1);
for(i=0;i<=9;i++)
{
num[i]+=x*m;
}
for(i=0;i<m;i++)
{
num[i]+=(int)pow(10.0,n-1);
}
num[m]+=m1+1;
num[0]+=(n-wei(m1)-1)*(m1+1);
if(m1==0)
return;
else
Countshu(m1,num);
}