Чтобы найти числа Армстронга в Java, вы можете использовать несколько методов. Число Армстронга — это число, равное сумме его цифр, возведенной в степень количества цифр. Вот несколько подходов, которые вы можете использовать:
Метод 1: использование цикла
public static boolean isArmstrong(int number) {
int originalNumber = number;
int numDigits = String.valueOf(number).length();
int sum = 0;
while (number != 0) {
int digit = number % 10;
sum += Math.pow(digit, numDigits);
number /= 10;
}
return sum == originalNumber;
}
public static void findArmstrongNumbers(int limit) {
for (int i = 0; i <= limit; i++) {
if (isArmstrong(i)) {
System.out.println(i);
}
}
}
Метод 2: использование рекурсии
public static boolean isArmstrong(int number) {
int originalNumber = number;
int numDigits = String.valueOf(number).length();
int sum = calculateSum(number, numDigits);
return sum == originalNumber;
}
public static int calculateSum(int number, int numDigits) {
if (number == 0) {
return 0;
}
int digit = number % 10;
int power = (int) Math.pow(digit, numDigits);
return power + calculateSum(number / 10, numDigits);
}
public static void findArmstrongNumbers(int limit) {
for (int i = 0; i <= limit; i++) {
if (isArmstrong(i)) {
System.out.println(i);
}
}
}
Метод 3: использование потоков (Java 8+)
import java.util.stream.IntStream;
public static boolean isArmstrong(int number) {
int originalNumber = number;
int numDigits = String.valueOf(number).length();
int sum = String.valueOf(number)
.chars()
.map(Character::getNumericValue)
.map(digit -> (int) Math.pow(digit, numDigits))
.sum();
return sum == originalNumber;
}
public static void findArmstrongNumbers(int limit) {
IntStream.rangeClosed(0, limit)
.filter(Test::isArmstrong)
.forEach(System.out::println);
}
Чтобы найти числа Армстронга, вы можете использовать любой из этих методов. В первом методе используется цикл, во втором — рекурсия, а в третьем — API Java 8 Stream.