Описание
Нарциссическое число — это положительное число, представляющее собой сумму его собственных цифр, каждая из которых возведена в степень количества цифр в данном основании. В этом Ката мы ограничимся десятичными числами (с основанием 10).
Например, возьмем 153 (3 цифры), что является самовлюбленным:
1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
и 1652 (4 цифры), что не является:
1^4 + 6^4 + 5^4 + 2^4 = 1 + 1296 + 625 + 16 = 1938
Соревнование
Ваш код должен возвращать true или false (не «true» и «false») в зависимости от того, является ли данное число нарциссическим числом в базе 10. Это может быть True и False на вашем языке, например. PHP.
Проверка ошибок текстовых строк или других недопустимых входных данных не требуется, в функцию будут переданы только допустимые положительные ненулевые целые числа.
Мой подход (javascript)
Шаг 1. Преобразуйте входное значение из числа в массив
Строка кода Array.from(String(value), Number);
преобразует наше число в строку (String(value)
), берет каждый символ этой строки, преобразует его в число (Number
) и помещает эти числа в новый массив (Array.from()
).
Шаг 2. Создайте переменную "Итого"
Нам нужна переменная, которая будет представлять общую сумму каждой цифры, возведенной в степень количества цифр. Мы еще не нашли эти значения, так что пока присвойте этой переменной значение 0.
Шаг 3. Перебор массива в цикле
Теперь, когда мы преобразовали входное значение в массив, у нас есть возможность перебрать каждую отдельную цифру. Сделайте это, создав цикл for, который начинается с индекса 0 и увеличивается, пока не достигнет конечного индекса в массиве.
Шаг 4. Возведите каждую цифру в степень количества цифр
Каждый раз, когда наш цикл for достигает цифры, мы хотим возвести ее в степень общего количества цифр в нашем входном значении. Сохраните это общее значение в переменной, здесь я назвал свою powered
.
(Примечание: поскольку я не включил ключевые слова let, var или const при объявлении моей переменной, теперь она существует в глобальной области видимости, и я могу получить к ней доступ вне блока цикла for. Вы можете экспериментировать с разными способами. чтобы сделать эту переменную доступной вне функции.)
Шаг 5. Помните переменную total?
Каждый раз, когда наш цикл for вычисляет значение для powered
, мы хотим добавить это значение к значению нашей ранее объявленной переменной total
.
Шаг 6. Сравните общую сумму с введенным значением
Теперь, когда мы перебрали каждую цифру, возведя каждую цифру в степень общего количества цифр, и сложили каждое из этих значений вместе для получения общей суммы, нам нужно сравнить total
с value
, которое изначально было передано через нашу narcissistic()
. функция.
Создайте оператор if, который сравнивает эти два значения. Если они равны друг другу, верните логическое значение true
. Если это не так, верните логическое значение false
.
Решено!
Мы написали нашу функцию narcissistic()
, и это Ката завершено!
Есть более простой способ решить эту проблему? Нужны какие-либо разъяснения? Дай мне знать в комментариях!
Окончательный код: