您的位置:首页 > 其它

数字统计问题

2011-11-12 12:11 316 查看
#include<stdio.h>
#include<math.h>

void GetParamater(int a[7][10],int n,int m,int sum0[7]);
void GetSum(int data,int sum[10],int a[7][10]);

int main(){
int a[7][10] ;
int data,sum[10],sum0[7];

GetParamater(a,6,10,sum0);
//printf("%lf\n",log10(92345));

while(scanf("%d",&data)){
GetSum(data,sum,a);
sum[0]-=sum0[(int)log10(data)+1];
for(int x=0;x<10;x++){
printf("%d\n",sum[x]);
}
}

return 0;
}

void GetParamater(int a[7][10],int n,int m,int sum0[7]){

for(int k=0;k<m;k++)
a[0][k] = 0;
sum0[0]=0;
for(int i=1,temp=1;i<=n;i++){
for(int j=0;j<m;j++){
a[i][j] = 10*a[i-1][j]+ temp;
//printf("%d  ",a[i][j]);
}
sum0[i]=sum0[i-1]+temp;
temp *= 10;
//putchar('\n');
}

}

void GetSum(int data,int sum[10],int a[7][10]){

for(int i=0;i<10;i++){
sum[i]=0;
}

while(data!=0){
int k = (int)log10(data);
//表示最高位是多少!
int p = pow(10,k);
int high = data/p;
//printf("k=%d  p=%d  high=%d\n",k,p,high);
for(int x=0;x<high;x++){
sum[x]+=p;
for(int y=0;y<10;y++){
sum[y]+=a[k][y];
}
}
//printf("data/p  = %d   p=%d\n",data%p+1,p);
sum[high]+=(data%p+1);
//printf("sum[high]%d  %d\n",sum[high],high);

//printf("%d\n",data);
data%=p;
p/=10;
}
//printf("data=%d\n",data);
}


数字统计问题

一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2,…,9。

编程任务:给定表示书的总页码的10 进制整数n (1≤n≤10^9) 。编程计算书的全部页码中分别用到多少次数字0,1,2,…,9。

输入: 每个输入只有1 行,给出表示书的总页码的整数n。

输出: 程序运行结束时,输出有10行,在第k行输出页码中用到数字k-1 的次数,k=1,2,…,10。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: