Проверка числа Армстронга в Java — код, вывод и объяснение
Число Армстронга — это число, равное сумме своих цифр, возведённых в степень, равную количеству цифр. Например, 371 — число Армстронга, потому что 3³ + 7³ + 1³ = 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.