JavaScript Armstrong编号测试案例错误



我要解决的问题是:

编写一个JavaScript程序,该程序在给定号码为Armstrong号码时返回true,否则为false。如果每个数字的第n个功率之和等于数字本身,则任何n位数字都是Armstrong号。示例:1533数字Armstrong号码,因为每个数字的第三幂的总和等于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);

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

我想念什么吗?什么可以改进?

用于获得自恋的编号/阿姆斯特朗号,您需要将数字的长度作为字符串作为n的字符串,以拿到求和值的电源。

只是一个个人单词,由于规格,我会服用Math.floor,因为您已经有一个数字,而不是parseInt

function armst(x) {
    var value = parseInt(x, 10),
        rest = value,
        digit,
        sum = 0,
        n = x.toString().length;       // add toString, if a number is entered
    while (rest) {
        digit = rest % 10;
        rest = Math.floor(rest / 10);
        sum += Math.pow(digit, n);    // use it here
    }
    return sum === value
        ? "Armstrong"
        : "Not Armstrong";
}
var num = prompt("Enter a number to check Armstrong"), // try with 54748
    output = armst(num);
console.log("Result is: ", output);

我认为,在某些测试中,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
} 

最新更新