Pascal求1-n各位数字和,在线等!!!

来源:百度知道 编辑:UC知道 时间:2024/06/15 09:59:35
给定一个N,计算1-N(包括1,N)中各数字出现的个数。
比如n=17时,输出
0 : 1 //0-17中0出现了1次
1 : 10 //0-17中1出现了10次
2 : 2 //0-17中2出现了2次
3 : 2
4 : 2
5 : 2
6 : 2
7 : 2
8 : 1
9 : 1
明白?别告诉我暴力,N<maxlongint!! 1S出解
急用,在线等,谢谢.
楼下的算法我看不懂……能写个程序吗?C的我能看懂,谢谢!

这个可以直接计算的吧,把数分解成几个n*10^m的数的和,n为个位数,其中每个数出现的次数都是n*10^(m-1)再把1到n的次数加一,m为零的时候把1到n的次数加一,然后把他们都加起来就好了。
没用过pascal,用c是挺简单的

int N,n,m=0,i;//给定N,n为个位数,m统计当前所在位
输入输出那些我就不弄了
int a[10]={0};//建立数组

//首先计算个位的,因为这时应该m=-1,当然
//把10^-1=0添加到函数里也可以
n=N%10;
for(i=1;i<=n;i++)a[i]++;
N=N/10;

while(N!=0){
n=N%10;
for(i=1;i<=n;i++)a[i]++;
for(i=0;i<10;i++)a[i]=n*(a[i]+10^m);
//10^m可以编个函数求
N=N/10;
m++;
}
一直算下去数组a就是所求解

只要把数分解成几个n*10^m的数的和,n为个位数,其中每个数出现的次数都是n*10^(m-1),m为零的时候把1到n的次数加一,然后把他们都加起来就行了