JavaScript实现Narcissistic Number判断的代码bug排查
十进制水仙花数判断函数问题排查
规则说明
- 水仙花数(Narcissistic Number)为正整数,核心判定逻辑:将数字按十进制位拆分后,每一位数字取该数字的总位数为指数做幂运算,所有幂结果之和等于原数字本身
- 函数返回要求:必须返回布尔类型
true/false,禁止返回字符串形式的'true'/'false'
原代码问题定位
原代码的整体实现思路完全正确,问题出在JS变量声明的细节踩坑:
代码中
let sum, poweredValue = 0;的写法存在错误:JS中逗号分隔的变量声明语句,只有紧跟赋值操作的变量会被赋予初始值,这行代码仅给poweredValue赋值为0,sum仅完成声明未做初始化,默认值为undefined。后续循环执行
sum += poweredValue时,undefined与数字做加法运算会得到NaN,而NaN和任何值做全等判断都会返回false,最终导致函数永远无法正确识别出合法的水仙花数。
修复后可直接运行的代码
function narcissistic(value) { let strDigits = value.toString(); let power = strDigits.length; let arrayDigits = strDigits.split(''); // 修复:给sum设置初始值0 let sum = 0, poweredValue = 0; for (let i = 0; i < power; i++){ poweredValue = Number(arrayDigits[i])**power; sum += poweredValue; } // 简化:全等判断本身返回布尔值,无需额外写if/else分支 return sum === value; }
- 简单验证:传入水仙花数
153时,计算得1³+5³+3³=1+125+27=153,函数正确返回true;传入非水仙花数123时,计算得1+8+27=36≠123,函数正确返回false,完全符合需求。
内容的提问来源于stack exchange,提问作者ali98ab
相关产品推荐
相关产品推荐

