You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 23:36:21