C#实现三位数统计代码始终输出0的错误排查
错误原因
你的代码始终输出0,是两个问题导致的:
- 类型错误:将数字转为字符串后,通过索引取到的
I[0]、I[1]、I[2]是char类型,存储的是对应数字字符的ASCII编码值(比如字符'0'对应ASCII码48,'1'对应49),直接用这些编码值做乘法运算、和字符做相等判断,永远不可能满足条件。 - 数位顺序混淆:字符串的0号索引对应三位数的最高位(百位),2号索引对应最低位(个位),你调试打印时把三个数位的顺序写反了,虽然这个问题不影响两两乘积的判断,但属于逻辑疏漏。
修复方法
最稳妥的实现方式是直接通过数学运算拆分三位数的百位、十位、个位,从根源上避免字符类型转换的坑,修复后的代码如下:
using System; class Program { public static void Main (string[] args) { int Total = 0; for (int i = 100; i < 1000; i++) { // 数学拆分直接得到整数类型的三个数位 int hundreds = i / 100; // 百位 int tens = (i / 10) % 10; // 十位 int units = i % 10; // 个位 // 判断是否存在两个数位的乘积等于第三个数位 if (units == tens * hundreds || tens == hundreds * units || hundreds == tens * units) { Total++; } } Console.WriteLine("the total is"); Console.WriteLine(Total); } }
运行说明
上述代码运行后最终统计得到符合要求的三位数共52个,完全匹配你给出的判定规则:比如248满足2*4=8、933满足3*3=9,都会被正确计入统计。
内容的提问来源于stack exchange,提问作者Peter Lu
相关产品推荐
相关产品推荐

