统计数字问题1

# include "stdlib.h"
# include "stdio.h"

//统计数字问题,此算法并不高效。还可以改进

int f( int nn);


void main()

{
 int i,j,m,mm,n,nn,k=0,n1=1,n2,t=0,sumn2;
 int a[10];//0,1,...9
 
 printf("输入页码\n");
 scanf("%d",&n);
       nn=n;

while (nn/10)
 {
  k++;
  nn/=10;
 }
   
 printf("页码为%d 位数\n",k+1);
   
 for (i=1;i<=k;i++)
  
 {
  n1 *= 10;
 }
 n2=n1;
 sumn2=0;
 while (n2)
 {
  sumn2+=n2/10;
  n2/=10;

}

printf("相关系数 如下:n=%d, n1=%d,n2=%d ",n,n1,n2);
 printf(",k=%d",k);
 for (i=0;i<=9;i++)
 {
  a[i]=0;
 }//数组的初始化
 if (k==0)
 {
  for (i=1;i<=n;i++)
   a[i]=a[i]++;
 }//一位数的情况
 else
      
  for(i=0;i<=9;i++)
  {
   a[i]=f(k);//0的问题要注意
  
  }
  a[0]-=sumn2;
    for (m=n1;m<=n;m++)
  
 {
  mm=m;
   while(mm)
   {

j=mm%10;
      a[j] = a[j]+1;
      mm/=10;

}
 }
  
 }
 printf("\n");
 for(i=0;i<=9;i++)

printf("a[%d]=%d\n",i,a[i]);

}


//-------f()的描述为n个0 到n个9的次数,0 为特殊情况

int f (int nn)
   
  int sumf=nn,i;
  for(i=1;i<=nn-1;i++)   sumf *= 10;
  return (sumf);
 }//end f()
  -----结果显示---------------------------------------------
输入页码
11
页码为2 位数
相关系数 如下:n=11, n1=10,n2=0 ,k=1
a[0]=1
a[1]=4
a[2]=1
a[3]=1
a[4]=1
a[5]=1
a[6]=1
a[7]=1
a[8]=1
a[9]=1
Press any key to continue

原文地址:https://www.cnblogs.com/big4panda/p/6417618.html