Проверка числа Армстронга в Java — код, вывод и объяснение

Число Армстронга — это число, равное сумме своих цифр, возведённых в степень, равную количеству цифр. Например, 371 — число Армстронга, потому что + + = 27 + 343 + 1 = 371.

Пример 1: проверка трёхзначного числа Армстронга

Перебираем цифры числа в цикле while, возводим каждую в куб и складываем.

public class Armstrong {

    public static void main(String[] args) {

        int number = 371, originalNumber, remainder, result = 0;

        originalNumber = number;

        while (originalNumber != 0)
        {
            remainder = originalNumber % 10;
            result += Math.pow(remainder, 3);
            originalNumber /= 10;
        }

        if(result == number)
            System.out.println(number + " is an Armstrong number.");
        else
            System.out.println(number + " is not an Armstrong number.");
    }
}

Вывод:

371 is an Armstrong number.

Алгоритм работы:

  • Сначала значение исходного числа number сохраняется в originalNumber, потому что в конце нам нужно сравнить итог с исходным.

  • Цикл while идёт, пока originalNumber не станет равен 0.

    • На каждой итерации последняя цифра originalNumber сохраняется в remainder.

    • remainder возводится в степень 3 (количество цифр) с помощью Math.pow() и прибавляется к result.

    • Последняя цифра удаляется делением на 10.

  • В конце result сравнивается с исходным number. Если они равны — это число Армстронга.

Пример 2: проверка числа Армстронга для n цифр

Для произвольного числа цифр сначала считаем количество цифр, а затем возводим каждую в эту степень.

public class Armstrong {

    public static void main(String[] args) {

        int number = 1634, originalNumber, remainder, result = 0, n = 0;

        originalNumber = number;

        for (;originalNumber != 0; originalNumber /= 10, ++n);

        originalNumber = number;

        for (;originalNumber != 0; originalNumber /= 10)
        {
            remainder = originalNumber % 10;
            result += Math.pow(remainder, n);
        }

        if(result == number)
            System.out.println(number + " is an Armstrong number.");
        else
            System.out.println(number + " is not an Armstrong number.");
    }
}

Вывод:

1634 is an Armstrong number.

В этой программе вместо одного цикла while используются два цикла for.

Первый цикл подсчитывает количество цифр в числе. Это сокращённая запись:

for (;originalNumber != 0; originalNumber /= 10) {
     n++;
}

Второй цикл вычисляет result: на каждой итерации остаток возводится в степень n.