实践描述:
亲爱的慕友们,在学习了 c语言的分支语句和循环 的编程知识后,我们了解熟练的运用分支和循环,大大提高程序的运行效率。那么在实际开发中我们可以用循环解决很多数学问题。在算法竞赛中,经常需要对满足特定条件的数字进行筛选。本题要求找出所有五位或六位的十进制回文数,且各位数字之和等于用户输入的正整数 n。欢迎小伙伴们一起讨论交流各自的想法和见解~
题目:
回文数是指正读和反读都相同的整数(如 121、1221)。现在要求找出所有满足以下条件的五位或六位十进制回文数:
- 从标准输入读取一个整数 n(1≤n≤54);
- 找出所有五位或六位回文数,其各位数字之和等于 n;
- 按从小到大的顺序输出这些数,每个数占一行;
- 若不存在,输出 “None”。
输入数据说明:
示例输入1:52
示例输入2:100
预计结果:
当输入为 52 时,程序输出
899998 989989 998899
当输入为 100 时,程序输出
None
一、开发语言与环境要求
1、语言版本:c语言
2、开发工具:Microsoft Visual Studio
二、程序整体要求
1、从标准输入读取一个整数 ;
2、输出所有满足条件的五位或六位回文数(升序),或 “None”;
3、代码书写规范,变量命名清晰,关键逻辑添加注释;
4、将源文件命名为 main.c,打包为 PalindromeFinder.zip 提交。
三、详细设计
1、主函数逻辑:
使用 scanf 读入 n;
遍历所有五位数(1000099999)和六位数(100000999999);
对每个数,调用 isPalindrome 和 digitSum 判断是否符合条件;
若找到,立即输出(自然升序);
若未找到任何数,输出 “None”。
2、自定义函数要求:
int isPalindrome(int num):判断 num 是否为回文数,返回 1(是)或 0(否);
int digitSum(int num):计算 num 各位数字之和,返回整型结果。
3、禁止使用字符串转换(如 sprintf),必须通过数学运算(除法、取余)实现数字拆解。
一、项目规范 【20分】
- 源文件名为 main.c,变量命名规范(如 digitSum 而非 ds);
- 代码结构层次分明,逻辑清晰;
- 关键步骤添加必要注释。
二、程序整体运行效果 【20分】
4. 程序能正确读取输入并输出结果;
5. 输出格式与预计结果完全一致(包括 “None” 大小写、换行)。
三、定义函数 【30分】
- 自定义 isPalindrome 函数,功能正确;
- 自定义 digitSum 函数,功能正确;
- 两个函数均有合理返回值。
四、算法实现正确性 【20分】
- 正确遍历五位和六位数范围;
- 能处理边界情况(如 n=1, n=54, 无解情况)。
五、禁用规则遵守 【10分】
1.未使用字符串转换函数(如 sprintf、itoa 等),纯数学实现。