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

C语言回文数检测函数问题求助:输入121返回false

回文数检测函数的问题修正

你的代码主要问题出在最后对比首尾元素的循环逻辑上,同时缺少特殊情况处理,导致输入121时返回错误结果。以下是具体问题和修正方案:

原代码的核心错误

  1. 对比循环逻辑完全错误:
    最后一个while循环的条件y == (g-y) && num[y] != num[g-y-2]逻辑混乱,既没正确控制循环终止条件,也颠倒了相等判断逻辑。对于输入121,该条件直接不成立,循环根本不会执行,直接走到return false。
  2. 特殊情况未处理:
    • 负数不可能是回文数(如-121),原代码未做判断,会错误处理这类输入。
    • 输入0时,原代码返回false,但0是回文数。
  3. 变量命名混乱:
    变量y被重复用于多个场景,容易导致逻辑混淆。

修正后的代码

bool isPalindrome(int x){
    // 负数直接返回false,负数不可能是回文数
    if (x < 0) {
        return false;
    }
    // 0是回文数
    if (x == 0) {
        return true;
    }

    int p = x;
    int digitCount = 0;
    // 计算数字的位数
    while (p != 0) {
        p /= 10;
        digitCount++;
    }

    int num[digitCount];
    p = x;
    int index = 0;
    // 将每一位存入数组,index从0开始,依次存个位、十位、百位...
    while (p != 0) {
        num[index] = p % 10;
        p /= 10;
        index++;
    }

    // 对比首尾元素,直到中间位置
    for (int i = 0; i < digitCount / 2; i++) {
        if (num[i] != num[digitCount - 1 - i]) {
            return false;
        }
    }

    return true;
}

修正说明

  • 特殊情况处理:先判断负数和0,直接返回对应结果,避免后续无效处理。
  • 清晰的变量命名:用digitCount表示数字位数,index表示数组索引,逻辑更直观。
  • 正确的对比逻辑:使用for循环从数组两端向中间对比,只要发现任意一对元素不等就立即返回false,循环完成后说明所有对应元素都相等,返回true。
  • 简化位数计算:初始digitCount设为0,每循环一次加1,直接得到准确的位数,避免原代码中y-1这类容易出错的索引计算。

内容的提问来源于stack exchange,提问作者Peazypound1212

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:11:28