C++实现数字对称比较输出功能,奇数位场景代码无输出求排查
问题分析与修复代码
原代码核心问题
- 未正确提取数字的各数位值,直接用循环变量i、j做比较,和实际数位没有关联
- 内层循环逻辑错误,j的初始值为末位数字的数值,循环判断条件
j<middle完全不符合业务逻辑,大概率不会进入循环,因此无输出 - 未实现中间位直接输出的逻辑,输出顺序也不符合需求要求
- 偶数位的判断逻辑错误,题目要求偶数位也需要完成对称配对比较输出结果,不需要提示无中间位
修复思路
- 将输入数字的所有数位按顺序存入数组,方便对称位置快速取值
- 从最外侧的对称数位开始逐对向内比较,每次输出较大的数位值
- 若为奇数位数字,所有配对比较完成后直接输出中间数位的值
修复后可运行代码
#include <iostream> #include <vector> using namespace std; int countDigit(int n) { int count = 0; while (n != 0) { count++; n /= 10; } return count; } int main() { int n; cin >> n; int count = countDigit(n); vector<int> digits(count); // 把数字的每一位存入数组,digits[0]是最高位,digits[count-1]是最低位 int temp = n; for (int i = count - 1; i >= 0; i--) { digits[i] = temp % 10; temp /= 10; } int pairCount = count / 2; // 逐对比较对称位置的数位 for (int i = 0; i < pairCount; i++) { int left = digits[i]; int right = digits[count - 1 - i]; cout << (left > right ? left : right) << " "; } // 奇数位输出中间位 if (count % 2 != 0) { cout << digits[pairCount]; } cout << endl; return 0; }
测试验证
- 输入
13257(5位奇数),输出7 5 2,符合示例要求 - 输入
583241(6位偶数),输出5 8 3,符合示例要求
内容的提问来源于stack exchange,提问作者tupkon
相关产品推荐
相关产品推荐

