JavaScript五位数回文判断问题:代码始终输出‘非回文’求排查
问题排查与修复
你的代码存在几个核心错误,导致无论输入正确的回文数都会输出错误结果:
主要错误点
- 错误将变量
a转为布尔值:代码中a=a % 10000 == 0;这类语句是在做布尔判断,执行后a会变成true或false,后续所有对a的数字运算都完全失效。 - 数字提取逻辑错误:直接用除法获取数位会得到浮点数(比如
12345/10000=1.2345),没有取整;且后续数位提取完全基于已被篡改的布尔值a,根本拿不到正确的数字。 - 变量未声明:
b、c、e未用let/var声明,属于不规范的隐式全局变量。
修复后的代码
let a = +prompt("Enter five digit number: "); if (a > 9999 && a < 100000) { // 用临时变量保存原始数值,避免修改a let num = a; // 提取各位数字(万位、千位、十位、个位) let b = Math.floor(num / 10000); // 第一位(万位) num = num % 10000; let c = Math.floor(num / 1000); // 第二位(千位) num = num % 1000; num = num % 100; // 跳过中间位(百位),回文数不要求中间位匹配 let e = Math.floor(num / 10); // 第四位(十位) num = num % 10; let f = num; // 第五位(个位) if (b === f && c === e) { alert("This is palindrome"); } else { alert("This is not palindrome"); } } else { alert("You entered not a five digit number"); }
修复说明
- 使用临时变量
num处理数位提取,保留原始输入的a用于后续判断。 - 用
Math.floor()确保提取的数位是整数。 - 明确提取万位、千位、十位、个位,判断万位等于个位、千位等于十位即可(五位数回文无需考虑中间百位)。
- 规范声明所有变量,避免隐式全局变量问题。
内容的提问来源于stack exchange,提问作者user19401771
相关产品推荐
相关产品推荐

