C#实现回文数检查时代码运行异常的问题排查
核心bug定位
你的判断逻辑失效的根本原因是:while循环执行完成后,参与循环运算的number变量已经被反复除以10,最终固定为0,你后续用值恒为0的number和反转结果reverse做相等判断,永远不可能得到正确结果。
执行流程拆解
以你测试用的number = 122为例,代码实际运行步骤如下:
- 初始状态:
number = 122,reverse = 0 - 第一次循环:
reverse = 0*10 + 122%10 = 2,number = 122/10 = 12 - 第二次循环:
reverse = 2*10 + 12%10 = 22,number = 12/10 = 1 - 第三次循环:
reverse = 22*10 + 1%10 = 221,number = 1/10 = 0 - 循环终止,此时
number值固定为0,无论输入是不是回文数,0 == reverse的判断几乎都不成立,自然输出错误结果。
修正后的代码
只需要在进入循环前保存原始输入值的副本,最终用原始值和反转结果比对即可:
using System; class HelloWorld { static void Main() { int number = 122; int original = number; // 存储原始输入值,避免循环修改变量导致原值丢失 int reverse = 0; while(number!=0){ reverse = (reverse*10) + number%10; number/=10; } Console.WriteLine(reverse); if(original == reverse){ Console.WriteLine("The number is palindrom"); } else{ Console.WriteLine("The number isn't palindrom"); } } }
额外优化提示
- 当前实现未处理负数场景:负号会导致负数天然不可能是回文数,可以在逻辑开头增加
if (number < 0)的分支,直接返回非回文的结果 - 注意整数溢出风险:如果输入值较大,反转后的结果可能超出
int类型的取值范围触发异常,生产环境使用可以增加溢出校验,或者选择转字符串比对的实现方案。
内容的提问来源于stack exchange,提问作者annyrk
相关产品推荐
相关产品推荐

