C++编程计算书页中各数字出现次数
需积分: 11 114 浏览量
更新于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 上传
2023-06-06 上传
2023-07-10 上传
2023-03-27 上传
2024-10-08 上传
2024-10-12 上传
2023-04-28 上传
Jokes_Pan
- 粉丝: 0
- 资源: 5
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器