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