JavaScript Armstrong Number测试用例错误

时间:2019-02-21 07:45:41

标签: javascript while-loop

我要解决的问题是:

  

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

     

提示:使用Math.pow(i,n)计算i的n次方。使用parseInt(i)获得i的整数值。您的输出代码应为console.log("Result is ", 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);

当我在课程网站上运行此代码时,它会提供正确的输出,但不会根据编译器通过所有测试用例。

我想念什么吗?有什么可以改善的?

2 个答案:

答案 0 :(得分:2)

要获取一个narcissistic number /阿姆斯壮数字,您需要将数字的长度作为imageView的字符串,以求幂来求和。

仅是一个私人用语,因为具体说明,我会选择Math.floor,因为您已经有一个数字,而不是parseInt

n

答案 1 :(得分:1)

我认为在某些测试b = a%10;a = parseInt(a/10);中会产生一些舍入错误。我建议对reduce使用不同的方法。像这样:

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
}