#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int jisuan(int x,int n,int a[10])
{
int i,j,m,s;
if(n==1)
{
for(i=0;i<=x;i++)
{
a[i]+=f(n);
}
return 0;
}
m=x/x10(n-1);//最高位
for(i=0;i<10;i++)
{
a[i]+=m*f(n-1);//每个数字频率
}
for(i=0;i<n-1;i++)
{
a[0]-=x10(i);//删除多余前导0
}
s=x-m*x10(n-1);
a[m]+=s+1;
jisuan(s,n-1,a);
}
int x10(n)
{
int i,j=1;
for(i=0;i<n;i++)
{
j*=10;
}
return j;
}
int f(n)
{
if(n==1)
return 1;
return 10*f(n-1)+x10(n-1);
}
int main(){
int x,n,m,s,i,j;
int a[10]={0};//储存数字个数
printf("请输入页数:");
scanf("%d",&x);
m=x;n=0;
while(m)//算长度
{
m/=10;
n++;
}
jisuan(x,n,a);//递归求解
for(i=0;i<10;i++)
{
printf("%d,",a[i]);
}
return 0;
}
计算页码各个数字个数
于 2022-03-11 21:02:15 首次发布