C++编程计算书页中各数字出现次数
需积分: 11 97 浏览量
更新于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的使用频率。这在处理大型数据集时具有很好的性能,并且结构清晰,易于理解。
693 浏览量
640 浏览量
211 浏览量
2010-11-26 上传
239 浏览量
2012-07-13 上传

Jokes_Pan
- 粉丝: 0
最新资源
- Web远程教学系统需求分析指南
- 禅道6.2版本发布,优化测试流程,提高安全性
- Netty传输层API中文文档及资源包免费下载
- 超凡搜索:引领搜索领域的创新神器
- JavaWeb租房系统实现与代码参考指南
- 老冀文章编辑工具v1.8:文章编辑的自动化解决方案
- MovieLens 1m数据集深度解析:数据库设计与电影属性
- TypeScript实现tca-flip-coins模拟硬币翻转算法
- Directshow实现多路视频采集与传输技术
- 百度editor实现无限制附件上传功能
- C语言二级上机模拟题与VC6.0完整版
- A*算法解决八数码问题:AI领域的经典案例
- Android版SeetaFace JNI程序实现人脸检测与对齐
- 热交换器效率提升技术手册
- WinCE平台CPU占用率精确测试工具介绍
- JavaScript实现的压缩包子算法解读