C#控制台程序:从数字最高位开始判断奇偶的问题求助
C#控制台程序:从数字最高位开始判断奇偶的问题求助
你好呀!刚接触编程两周就能自己动手写代码已经很棒了~ 咱们先看看你当前代码的问题:你现在是把数字反转过来,并且每取一位原数字的最低位就立刻输出判断结果,所以顺序完全反过来了(比如输入5228,你先处理的是最后一位8,然后是2、2、5,输出顺序自然就反了)。
给你两个简单的解决方案,新手友好度拉满:
方案一:直接处理输入字符串(最推荐,逻辑最简单)
既然你已经拿到了输入的字符串,其实完全不需要转成整数再处理!因为字符串本身就是按数字的顺序(最高位在前)存储的,直接遍历每个字符就行:
using System; public class TestVariablesandExpressions { static void Main(string[] args) { string inputData = Console.ReadLine(); // 从左到右遍历字符串的每一个字符,正好对应数字的最高位到最低位 foreach (char c in inputData) { // 将字符转成对应的数字:字符'0'的ASCII码是48,用当前字符减去'0'就能得到数字值 int digit = c - '0'; Console.WriteLine(digit % 2 == 0 ? "EVEN" : "ODD"); } } }
这个方法的好处是逻辑直观,不需要复杂的数字运算,特别适合刚入门的你,而且完全不会出错~
方案二:用数学方法从最高位开始取数(适合练习数字操作)
如果你想练习整数的运算操作,也可以先找到数字的最高位权值,再依次取出每一位判断:
using System; public class TestVariablesandExpressions { static void Main(string[] args) { string inputData = Console.ReadLine(); int num = Convert.ToInt32(inputData); // 先算出最高位的除数,比如5228的除数是1000 int divisor = 1; int tempNum = num; while (tempNum >= 10) { tempNum /= 10; divisor *= 10; } // 从最高位开始依次处理每一位 while (divisor > 0) { int currentDigit = num / divisor; Console.WriteLine(currentDigit % 2 == 0 ? "EVEN" : "ODD"); num %= divisor; // 去掉已经处理过的最高位 divisor /= 10; // 除数缩小10倍,处理下一位 } } }
这个方法的思路是先找到能取出最高位的除数,然后一步步缩小除数,依次处理每一位数字,也能实现从最高位开始判断的需求。
你可以先试试方案一,代码少又容易理解,完全能解决你的问题~
备注:内容来源于stack exchange,提问作者Bunker




