
✅ PAT 甲级题目讲解1005《Spell It Right》摘要本文讲解 PAT 甲级 1005 题《Spell It Right》的完整解题思路与 C 实现。题目要求对最多 100 位的非负整数求数位和并将和的每一位以英文单词输出。文章分三步展开字符串读取与特判、数位求和、数字拆解与英文映射输出并附完整代码、常见错误提醒及复杂度分析适合备考 PAT 甲级的读者参考。 题目简介本题要求你对一个最多 100 位的非负整数NNN计算其所有数位之和并将该“数位和”中的每一位按英文单词形式输出。例如输入12345数位和为123451512345151234515输出应为one five 样例分析输入12345各数位相加1234515 1 2 3 4 5 151234515将151515的每一位按英文输出1 → one5 → five输出one five 解题思路本题可分为三步输入处理、求和、英文映射输出。 变量说明变量名类型含义nstring输入的非负整数字符串形式sint所有数位的累加和a[]int[]将s拆解为各个位数字kint数组 a[] 的当前位数num[]string[]0~9 对应的英文单词数组✅ Step 1读取字符串并计算所有位之和由于输入的整数可能达到1010010^{100}10100无法用整型变量保存需用字符串读入。输入后先特判 0 的情况直接输出 “zero”结束程序string n;cinn;ints0;if(n0){coutzero;return0;}对于非 0 情况再遍历字符串求出各位数字之和;for(inti0;in.size();i){sn[i]-0;}✅ Step 2将数位和拆解为数字数组将整数sss拆分为每一位保存在数组中从个位开始逆序存储inta[100],k0;while(s){a[k]s%10;s/10;}✅ Step 3输出对应英文单词用英文单词数组完成数字到字符串的映射输出并控制空格string num[10]{zero,one,two,three,four,five,six,seven,eight,nine};for(intik;i1;i--){coutnum[a[i]];if(i!1)cout ;// 最后一个数后面不加空格}✅ 完整代码#includebits/stdc.husingnamespacestd;intmain(){string n;cinn;if(n0){coutzero;return0;}ints0,lenn.size();for(inti0;ilen;i){sn[i]-0;}inta[100],k0;while(s){a[k]s%10;s/10;}string num[10]{zero,one,two,three,four,five,six,seven,eight,nine};for(intik;i1;i--){coutnum[a[i]];if(i!1)cout ;}return0;} 常见错误提醒错误类型具体表现使用整型读入输入数据过大导致溢出输出顺序反了数位拆解后未倒序输出多余空格输出末尾加空格或中间多空格未特判输入为 0输入 “0” 情况下未正确输出 “zero”✅ 总结归纳 核心方法总结大整数使用字符串读取遍历字符求数位和数组映射数字到英文输出。 技术要点回顾字符串与整数互转数位分解与顺序控制输出格式控制技巧。 复杂度分析时间复杂度O(n)\mathcal{O}(n)O(n)空间复杂度O(n)\mathcal{O}(n)O(n)其中nnn为输入字符串长度最大不超过 100。 思维拓展如果要求直接输出英文表达形式如 “fifteen” 呢支持不同语言映射如中文数字应如何设计映射表若需要输出全称如“one hundred twenty-three”应如何处理语法规则