统计数字问题的算法看不是很懂

shkimi 2013-04-22 10:36:41
统计数字问题
问题描述:
一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2,…,9。
给定表示书的总页码的10进制数 n (1£n£10 9)。计算书的全部页码中分别用到多少次数字0,1,2,…,9。
数据输入:
输入有若干组数据,每组仅一行,每行有一个整数,表示给出表示书的总页码的整数n。
结果输出:
对输入中的每行上的页数,输出一行,该行有10个数组成,其第k个数是页码中用到数字k-1的次数,之间空一格,k=1,2,…,10。
输入样例
11

输出样例
1 4 1 1 1 1 1 1 1 1

代码如下,请问Num函数的算法是怎样的,不是很看得懂?求大牛指教

#include <iostream>
#include <memory.h>
using namespace std;
void Num(int sn[10] ,int n)
{
int i,c,k,s,p;
memset(sn,0,10*sizeof(int));
for(k=s=0 ,p =1; n>0 ; k++ , n/=10 ,p *= 10)
{
c=n%10;
for(i=0 ; i <10 ; i++)
{
sn[i] +=c*k*(p/10);
}
for(i=0; i<c ;i++)
{
sn[i] += p;
}
sn[c] += 1+s;
sn[0] -= p;
s+=c*p;
}
}
int main()
{
int sn[10];
int pages;
while(cin>>pages){
Num(sn,pages);
for(int j =0; j<10 ; j++)
{
cout<<sn[j];
if(j!=9)cout<<" ";

}
cout<<endl;
}

return 0;
}
...全文
124 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧