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

JavaScript实现Narcissistic Number判断代码出错,求纠错与指导

关于自恋数(Armstrong Number)的JavaScript代码问题

自恋数(又称Armstrong Number)是指一个正整数,等于其各位数字在十进制下,每个数字的位数次幂之和。
例如,153(3位数字)是自恋数:

1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153

而1652(4位数字)不是:

1^4 + 6^4 + 5^4 + 2^4 = 1 + 1296 + 625 + 16 = 1938

挑战要求:代码需根据给定数字是否为十进制下的自恋数,返回布尔值true或false(不是字符串)。

我刚接触JavaScript编程,写了一段自认为逻辑合理的代码,能通过部分测试,但显然存在问题,希望有人指出问题所在,帮助我理解此类问题的正确解法。

我的代码如下:

function narcissistic(value) {
    if (value != Number(value)) {
        return "Please enter a number!"
    } else {
        let counter = 0;
        let digits = [];
        for (let i = 0; i < value.length; i++) {
            if (value[i] === 0) {
                value.splice[i, 1];
                counter += 1;
                digits.push(i);
            }
        }
        if (value == digits ** value.length) {
            return true;
        } else {
            return false;
        }
    }
    return false;
}

你的代码存在的核心问题:

  • 数字类型误用length属性:value是数字类型,数字本身没有length属性,value.length会返回undefined,导致循环根本不会执行。
  • 错误处理不符合题目要求:题目明确要求返回布尔值,你却返回了字符串提示,这会直接导致测试用例失败;且题目默认输入为数字,无需额外处理非法输入。
  • 逻辑完全偏离自恋数计算规则:你试图删除0、存储循环索引的逻辑和自恋数的计算无关,digits ** value.length既不是各位数字的幂运算,也没有求和,完全不符合需求。
  • 方法调用错误:splice是数组方法,调用格式应为arr.splice(i,1),但你写成了value.splice[i,1],且value是数字不是数组,这行代码完全无效。

正确解法思路:

  1. 将数字转为字符串,获取每一位字符,同时记录数字的位数。
  2. 遍历每一位字符,转为数值后计算其位数次幂,累加所有结果。
  3. 比较累加结果与原数字是否相等,返回对应的布尔值。

示例代码:

function narcissistic(value) {
    const numStr = value.toString();
    const digitCount = numStr.length;
    const total = numStr.split('').reduce((sum, digit) => {
        return sum + Math.pow(parseInt(digit), digitCount);
    }, 0);
    return total === value;
}

代码解释:

  • value.toString():把数字转为字符串,方便拆分每一位并获取长度。
  • numStr.split(''):将字符串拆分为单个字符的数组,比如"153"会变成["1","5","3"]。
  • reduce方法:遍历数组累加每一位数字的幂运算结果,Math.pow(parseInt(digit), digitCount)实现“数字的位数次幂”计算。
  • 最后直接比较累加和与原数字,返回布尔值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:31:07