Число Армстронга

Число Армстронга – натуральное число, которое равно сумме своих собственных цифр возведенных в степень, равную длине числа. Например: 371 = 33 + 73 + 13.

Метод для проверки, является ли заданное число числом Армстронга

Поскольку для проверки, нам нужно работать с отдельными цифрами числа, напишем метод для получения массива цифр заданного числа:

static uint[] SplitNumber(uint n)
{
    var result = new uint[0];
    int i = 0;
    while (n > 0)
    {
        //увеличиваем размер массива
        Array.Resize(ref result, i + 1);
        //получаем последнюю цифру
        result[i] = n % 10;
        //отбрасываем последнюю цифру
        n = n / 10;
        i++;
    }

    //переворачиваем массив
    Array.Reverse(result);
    return result;
}

Также нам понадобится метод для возведения чисел в степень, для этого воспользуемся рекурсивной функцией:

  • x0 = 1;
  • xy = x * xy - 1.
static uint Power(uint x, uint y)
{
    return y == 0 
        ? 1 //число в нулевой степени возвращает 1
        : x * Power(x, y - 1);
}

Можно использовать стандартный метод Math.Pow.

Все необходимые методы у нас есть, можно написать метод проверки соответствия заданного числа требованиям к числу Армстронга:

static bool IsArmstrongNumber(uint number)
{
    var digits = SplitNumber(number); 
    var sum = 0u;
    var p = (uint)digits.Length; //степень
    //в цикле считаем сумму
    foreach (var digit in digits)
    {
        sum += Power(digit, p);
    }

    return sum == number;
}

Поиск всех трехзначных чисел Армстронга

Напишем программу для нахождения всех чисел Армстронга в заданном диапазоне:

static void Main(string[] args)
{
    Console.Write("Начало диапазона: ");
    var s = Convert.ToUInt32(Console.ReadLine());
    Console.Write("Конец диапазона: ");
    var e = Convert.ToUInt32(Console.ReadLine());

    Console.WriteLine("Числа Армстронга из диапазона от {0} до {1}", s, e);
    for (uint i = s; i <= e; i++)
    {
        if (IsArmstrongNumber(i))
        {
            Console.Write("{0} ", i);
        }
    }

    Console.ReadLine();
}

Если указать диапазон от 100 до 999, программа выведет на экран все трехзначные числа Армстронга(153, 370, 371, 407):

Для поиска четырехзначных достаточно изменить диапазон на (1000 - 9999):

В результате получим: 1634, 8208, 9474.

Смотрите также: