C++编程计算书页中各数字出现次数
需积分: 11 131 浏览量
更新于2024-09-10
收藏 1KB TXT 举报
在这个C++算法问题中,我们讨论的是如何统计一个从1到n(n不包含0)的自然数序列中每个数字0到9出现的次数。给定一个整数n,我们的目标是实现一个函数来计算从1到n的所有页码中每个数字的使用频率。
首先,程序定义了一个名为`f`的辅助函数,用于计算一个十进制数的位数,即`n`的位数减一。这是通过将`n`除以10的幂次得到的,其中幂的指数是`n-1`的浮点值。这个函数返回的结果表示在n的最右侧的非零数字之前需要的零的数量。
接下来是`CountNumber`函数,它接受一个整数m作为参数,并维护一个长度为10的整数数组a,用于存储0到9的出现次数。函数首先检查m是否为0,如果是,则递归结束。如果m不为0,它首先计算m在当前位数n中的次数(k),然后根据n的值进行不同的处理:
1. 如果n大于1,表示m有多个位数,需要逐个处理每一位。首先,为1到k-1的每一位分配了`pow(10, (double)(n-1))`个0。接着,因为k个位置已经填满,所以将k乘以`f(n-1)`添加到对应数字上。最后,对剩余的m减去`k * pow(10, (double)(n-1))`,并更新0的计数。
2. 如果n等于1,表示m是一个一位数,只需遍历并将每位数字加1。
3. 当m不再需要当前位数时,更新m的值,如果m变为0,表示已经处理到最低位,此时将n-1个0添加到0的计数中。否则,根据新的位数n1继续递归调用`CountNumber`函数。
`main`函数中,程序读取用户输入的n值,创建一个大小为10的数组,然后调用`CountNumber`函数来填充数组,最后输出每个数字在所有页码中出现的次数。
总结来说,这段代码实现了一个高效的算法,利用了位运算和递归,能够准确地统计从1到n的自然数序列中每个数字0到9的使用频率。这在处理大型数据集时具有很好的性能,并且结构清晰,易于理解。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2010-10-08 上传
2020-09-03 上传
2014-03-02 上传
2010-11-26 上传
2021-09-30 上传
Jokes_Pan
- 粉丝: 0
- 资源: 5
最新资源
- Eclipse教程中文版
- computer -电脑方面
- 基于J2EE的Ajax宝典
- computer 电脑方面文档\
- O'Reilly XAML in a Nutshell
- C_C++指针经验总结.pdf
- Windows XP 启动过程详解
- 2005 - Apress - Pro C Sharp 2005 And The .Net 2.0 Platform 3rd Edition
- Android编程指南
- JSP课程设计试实验下载
- 批处理程序实用教程(pdf)
- 计算机常用英语单词总结
- java and xslt
- Java_3D_Programming
- ASP.NET三层结构及应用2006-12-05 04:05概念及环境
- fgfhfgh fhgfdg