如何遍历数字的每一位?求数字反转及提取偶数位的C#程序帮助
问题分析与解决方案
你的代码存在几个核心问题,导致无法实现「反转数字+输出每一位偶数」的需求:
- 数组使用错误:你把反转后的完整数字存入数组,而非拆分每一位,因此
foreach循环只会输出整个反转数,无法逐个处理单一位数。 - 缺少偶数判断逻辑:代码里完全没有对数字的每一位进行奇偶校验的步骤,自然无法筛选出偶数位。
- 整数溢出风险:10位数字的最大值是9999999999,远超
int类型的取值范围(约-21亿到21亿),会直接触发溢出错误。 - 输入无合法性校验:直接用
int.Parse处理输入,若用户输入非数字内容会直接抛出异常。
下面是修正后的完整代码,同时实现两个需求:
do { Console.WriteLine("请输入一个10位数字:"); // 用long适配10位数字范围,同时校验输入合法性 if (!long.TryParse(Console.ReadLine(), out long number)) { Console.WriteLine("输入无效,请输入有效的数字!"); continue; } long reverse = 0; long temp = number; // 保留原数字,避免操作修改原变量 // 执行数字反转逻辑 while (temp > 0) { long digit = temp % 10; reverse = reverse * 10 + digit; temp = temp / 10; } Console.WriteLine("反转后的数字:" + reverse); Console.WriteLine("反转数字中的偶数位:"); // 遍历反转后的数字,提取每一位偶数 long tempReverse = reverse; while (tempReverse > 0) { long digit = tempReverse % 10; if (digit % 2 == 0) { Console.WriteLine(digit); } tempReverse = tempReverse / 10; } } while (true);
关键修改说明:
- 替换为
long类型:解决10位数字超出int范围的溢出问题。 - 添加输入校验:用
long.TryParse判断输入是否合法,非法输入时提示并重新进入循环。 - 拆分反转数字的每一位:通过
%10和/10逐个提取反转后数字的单一位数,再判断是否为偶数。 - 保留原输入数字:用临时变量
temp处理反转逻辑,避免修改原输入值。
内容的提问来源于stack exchange,提问作者Marius Arion
相关产品推荐
相关产品推荐

