c 语言统计数字

//把前n(n<10000)个整数顺次写在一起:12345678910111213141516....数一数0至9出现的次数

//输出10个整数,分别是0,1,2..至9出的个数

//解题思路:分别统计每一个数中的每一位的数 并判断其每一位的值

#include<stdio.h>

#include<string.h>

const int maxn= 10001;

int cD[maxn][10];

int main(){

int b=0;

//置零

memset(cD,0,sizeof(cD));

//遍历数组每一位

for(int i=0;i<=10000;i++){

b=i;

//循环每一个数字的每一位

for(;;){

//统计每一个数字中的每一位的数字情况

for(int j=0;j<10;j++){

//最后一位的数字

if(i%10==j){

cD[i][j]++;

break;

}

}

//数字减少一位

b/=10;

//跳出循环

if(b==0)

break;

}

}

int n;

scanf("%d",&n);

//统计输出结果

for(int j=0;j<10;j++){

int sum=0;

for(int i=1;i<=n;i++){

sum+=cD[i][j];

}

printf("%d: %d\n",j,sum);

}

return 0;

}