Данная статья представляет собой отчет по одному из упраженений с сайта 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) и возводим в степень длины числа, после чего суммируем результат и проверяем его на равенство исходному числу. Если результат суммирования оказался равным исходному числу, то перед нами — число Армстронга.