javascript armstrong数字测试用例错误

javascript armstrong数字测试用例错误,javascript,while-loop,Javascript,While Loop,我要解决的问题是: 编写一个javascript程序,当给定的数字是Armstrong数字时返回true,否则返回false。如果每个数字的n次幂之和等于数字本身,则任何n位数字都是阿姆斯特朗数。示例:153是一个3位的阿姆斯特朗数,因为每个数字的三次方之和等于153(153=1*1*1+5*5+3*3) 提示:使用Math.pow(i,n)计算i的n次方。使用parseInt(i)获取i的整数值。输出代码的格式应为console.log(“结果是”,variableName) 我的代码是: v

我要解决的问题是:

编写一个javascript程序,当给定的数字是Armstrong数字时返回true,否则返回false。如果每个数字的n次幂之和等于数字本身,则任何n位数字都是阿姆斯特朗数。示例:
153
是一个
3
位的阿姆斯特朗数,因为每个数字的三次方之和等于
153
153=1*1*1+5*5+3*3

提示:使用
Math.pow(i,n)
计算
i
的n次方。使用
parseInt(i)
获取
i
的整数值。输出代码的格式应为
console.log(“结果是”,variableName)

我的代码是:

var num = prompt("Enter a number to check Armstrong");
var t = "Armstrong";
var f = "Not Armstrong";

function armst(x) {
    var a = x, b, sum = 0;
    while (a > 0) {
        b = a % 10;
        sum += (b * b * b);
        a = parseInt(a / 10);
    }

    if (sum === x) {
        return t;
    } else {
        return f;
    }
}

var output = armst(num);
console.log("Result is : ", output);
当我在课程网站上运行这段代码时,它给出了正确的输出,但根据编译器,它并没有通过所有的测试用例


我错过什么了吗?有什么可以改进的?

我认为在一些测试中
b=a%10
a=parseInt(a/10)可能会给出一些舍入错误。我建议使用一种不同的方法。大概是这样的:

function isArmstrong(number){
  const digits = number.toString().split(''); // get all the digits
  const numberLength = digits.length; // get the length of the number
  const sum = digits.reduce((accumulator, digit)=> parseInt(accumulator)+Math.pow(parseInt(digit), numberLength))
  // use reduce to iterate and add every number to the numberLength power
  return sum === number
} 
要获取/Armstrong数字,需要将数字的长度作为字符串,如
n
获取求和值的幂

只是一个个人的话,因为规格,我会接受,因为你已经有了一个数字,而不是

功能armst(x){
var值=parseInt(x,10),
剩余=价值,
数字
总和=0,
n=x.toString().length;//如果输入了数字,则添加toString
当(休息){
数字=剩余的%10;
休息=数学楼层(休息/10);
sum+=Math.pow(数字,n);//在这里使用
}
返回和===值
“阿姆斯特朗”
:“不是阿姆斯特朗”;
}
var num=prompt(“输入一个数字以检查Armstrong”),//尝试使用54748
输出=armst(num);

log(“结果为:”,输出)当我输入num=153时,您的第一次和第二次编辑提供了正确的输出,但是编译器似乎进入了无限循环,因为网站没有显示程序正确(通常是正确的)的消息,并且我的cpu以100%的速度运行。第三次编辑根本不起作用。可能您输入了一个数字,然后需要
toString
来获得数字的长度。5474 547 54 5结果是:不是阿姆斯特朗| |这发生在将console.log(rest)放入while循环后的第5次编辑中的54748中。在最新的编辑中,我得到了正确的输出。网站仍然说代码不正确,但我认为这是另一个问题。谢谢。