GESP2026年3月认证C++一级( 第三部分编程题(2)数字替换)
一、故事Alice讨厌数字41、Alice 是一个很可爱的同学不过她有一个小小的习惯她不喜欢数字 4。1因为在很多地方4 的谐音像 “死”2但她特别喜欢8因为8 的谐音像 “发”3于是 Alice 想做一件事如果数字里有4就把它变成 82、题目任务1输入一个整数例如84590452把所有4变成83结果变成88590853、例子11输入84590452替换原数字替换884855990048553结果88590854、例子21输入1232因为没有43输出123二、本题关键问题1、程序如何拆数字1比如84590452要拆成8 4 5 9 0 4 53这里就要用到一个竞赛最重要的算法⭐拆数字算法2、拆数字算法两个超级重要的操作① 取个位a % 10意思取最后一位例如8459045 % 10 5② 去掉个位a / 10例如8459045 → 8459043、拆数字过程图解1假设a 8459045(2) 循环过程步骤aa%10;a/10;1845904552845904438459004845995845568447884、判断是不是41如果a % 10 42说明这一位是43就要改成85、但这里有一个新问题1如果我们直接拼接会变成58098582数字是倒得为什么因为我们是从右往左拆数字6、解决办法记录位数我们准备一个变量t 1它表示当前数字位数7、位数变化数字位t个位1十位10百位100千位1000每次t * 108、算法完整思路步骤如下1第1步读入数字cin a;2第2步循环拆数字while(a)3第3步取个位a % 104第4步判断是不是4如果是变成8否则保持原样5第5步拼接到新数字b t * 数字6第6步去掉个位a / 107第7步位数增加t * 10三、完整程序#include iostream using namespace std; int main() { int a, b 0, t 1; cin a; while(a) { if(a % 10 4) b t * 8; else b t * (a % 10); a / 10; t * 10; } cout b; return 0; }四、程序运行过程1、输入84590452、变量变化aa%10替换b84590455558459044885845900008584599990858455559085844885908588888590853、最终8859085五、一级考试这道题在考什么考三个核心知识。① 拆数字N % 10 N / 10这是竞赛最重要技巧之一。很多题都用。例如数位和回文数数字翻转各位统计② 判断数字if(a%104)③ 重建数字b t * digit六、小学生记忆口诀汉克老师教大家一个口诀拆数字 看个位 如果是4变成8 乘权加回去七、简化代码#includeiostream using namespace std; int main() { int n; cinn; int ans0; int base1; while(n0) { int dn%10; if(d4) d8; ansd*base; base*10; n/10; } coutans; }八、最后总结1、这道题本质就是拆数字 → 判断 → 拼数字2、算法结构while(n) { 取个位 修改 拼接 去掉个位 }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2422582.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!