ошибки тестового набора Javascript Armstrong Number

Наборы основаны на хэш-таблице. Хэш значения должен быть последовательным, поэтому порядок будет также - если два элемента хэш не совпадают с одним и тем же кодом, и в этом случае порядок вставки изменит порядок вывода.

2
задан varun agarwal 21 February 2019 в 08:46
поделиться

2 ответа

Я думаю, что в некоторых тестах 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
} 
0
ответ дан Vladimir Bogomolov 21 February 2019 в 08:46
поделиться

Чтобы получить нарциссическое число / число Армстронга, вам нужно взять длину числа в виде строки, как 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);

0
ответ дан Nina Scholz 21 February 2019 в 08:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: