Является ли число числом Армстронга ?

Данная статья представляет собой отчет по одному из упраженений с сайта excercism.io, которое я выполнил чисто из интереса к исскуству и любви к математике.

Число Армстронга — это  натуральное число, которое в данной системе счисления равно сумме своих цифр, возведённых в степень, равную количеству его цифр.

Реализация проверки числа:

import std.algorithm;
import std.conv;
import std.range;
import std.functional;

auto isArmstrongNumber(int N)
{
          return N
                 .to!string
                 .map!(a => (a - 48) ^^ (N.to!string.length))
                 .sum
                 .binaryFun!"(a - b) == 0"(N);
}

Работает это так: переводим число в строку, затем переводим каждый символ в цифру, вычитая 48 (это код цифры ноль в ASCII) и возводим в степень длины числа, после чего суммируем результат и проверяем его на равенство исходному числу. Если результат суммирования оказался равным исходному числу, то перед нами — число Армстронга.

Добавить комментарий