✅ PAT 乙级题目讲解1016《部分AB》 题目简题目摘要本题目要求从两个正整数中分别提取指定数字并拼接成新整数计算其和。核心考察字符串提取与数字构造的模拟实现时间复杂度O(n)\mathcal{O}(n)O(n)空间复杂度O(1)\mathcal{O}(1)O(1)。适合入门练习数位拆分与拼接技巧。介本题考查的是字符串提取 数字构造的模拟实现问题。给定两个正整数AAA和BBB以及两个数字DAD_ADA和DBD_BDB。我们需要从AAA中提取出所有为DAD_ADA的数字并按原顺序拼接成一个新整数PAP_APA同理从BBB中提取出所有为DBD_BDB的数字拼接成PBP_BPB并输出PAPBP_A P_BPAPB。 样例分析输入样例 13862767 6 13530293 3A3862767,DA6A 3862767, D_A 6A3862767,DA6→ 提取出数字 6PA66P_A 66PA66。B13530293,DB3B 13530293, D_B 3B13530293,DB3→ 提取出数字 3PB33P_B 33PB33。输出PAPB663399P_A P_B 66 33 99PAPB663399。输出99输入样例 23862767 1 13530293 8AAA中没有数字 1PA0P_A 0PA0。BBB中没有数字 8PB0P_B 0PB0。输出0000 0 0000。输出0 解题思路 变量说明变量名数据类型含义aint输入的整数AAAdaint要提取的数字DAD_ADAbint输入的整数BBBdbint要提取的数字DBD_BDBpint计算得出的新整数PAP_APA或PBP_BPB✅ Step 1读取输入数据从输入中读取整数AAA和BBB以及它们对应的数字DAD_ADA和DBD_BDB。cinadabdb;✅ Step 2定义函数p(x, dx)提取部分数字定义一个函数p来提取给定整数xxx中所有为dxdxdx的数字并拼接成一个新整数。intp(intx,intdx){intpx0;while(x){if(x%10dx){pxpx*10dx;}x/10;}returnpx;}每次从xxx中提取最低位数字如果数字等于dxdxdx就拼接到px上最后返回拼接得到的结果。✅ Step 3计算并输出PAPBP_A P_BPAPB通过调用p(a, da)和p(b, db)分别得到PAP_APA和PBP_BPB然后输出它们的和。coutp(a,da)p(b,db);✅ 完整代码#includebits/stdc.husingnamespacestd;inta,da,b,db;intp(intx,intdx){intpx0;while(x){if(x%10dx){pxpx*10dx;}x/10;}returnpx;}intmain(){cinadabdb;coutp(a,da)p(b,db);} 常见错误提醒错误类型具体表现字符串提取错误提取数字时未按正确顺序拼接导致结果错误输出格式错误输出时未按照题目要求格式打印可能丢失空格或换行✅ 总结归纳 核心方法总结通过字符串提取模拟提取数字使用数位拆分和重组来拼接结果。 技术要点回顾数位拆分与拼接的标准方法数字匹配与提取技巧避免溢出的边界条件处理。 复杂度分析时间复杂度O(n)\mathcal{O}(n)O(n)空间复杂度O(1)\mathcal{O}(1)O(1)其中nnn为输入数据中最大数字的位数最多 9 位。 思维拓展扩展思考如果题目要求提取数字并按奇偶性筛选拼接该如何实现类似题目数字构造类问题如回文数判断、数字逆序等其他思路可将函数p中的数位提取改为直接使用字符串操作。