← Назад к вопросам

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

1.6 Junior🔥 81 комментариев
#Основы Java

Условие

Напишите Java-программу для проверки, является ли число числом Армстронга.

Число Армстронга — это число, равное сумме своих цифр, каждая из которых возведена в степень количества цифр в числе.

Примеры

  • 153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153 → число Армстронга
  • 370 = 3³ + 7³ + 0³ = 27 + 343 + 0 = 370 → число Армстронга
  • 123 = 1³ + 2³ + 3³ = 1 + 8 + 27 = 36 ≠ 123 → не число Армстронга
  • 9474 = 9⁴ + 4⁴ + 7⁴ + 4⁴ = 6561 + 256 + 2401 + 256 = 9474 → число Армстронга

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Подход

Преобразуем число в строку для подсчёта количества цифр. Затем проходим по каждой цифре, возводим в степень (количество цифр) и суммируем. Сравниваем результат с исходным числом.

Решение

public class ArmstrongNumberChecker {
    
    public static boolean isArmstrongNumber(int number) {
        if (number < 0) {
            return false;
        }
        
        String numStr = String.valueOf(number);
        int numDigits = numStr.length();
        
        int sum = 0;
        for (char digit : numStr.toCharArray()) {
            int digitValue = digit - '0';
            sum += Math.pow(digitValue, numDigits);
        }
        
        return sum == number;
    }
    
    public static boolean isArmstrongNumberLong(long number) {
        if (number < 0) {
            return false;
        }
        
        String numStr = String.valueOf(number);
        int numDigits = numStr.length();
        
        long sum = 0;
        for (char digit : numStr.toCharArray()) {
            int digitValue = digit - '0';
            sum += Math.pow(digitValue, numDigits);
        }
        
        return sum == number;
    }
    
    public static void findAllArmstrongNumbers(int limit) {
        System.out.println("Числа Армстронга до " + limit + ":");
        for (int i = 0; i <= limit; i++) {
            if (isArmstrongNumber(i)) {
                System.out.print(i + " ");
            }
        }
        System.out.println();
    }
    
    public static void verifyArmstrong(int number) {
        String numStr = String.valueOf(number);
        int numDigits = numStr.length();
        
        System.out.println("Проверка числа: " + number);
        System.out.println("Количество цифр: " + numDigits);
        System.out.print("Вычисление: ");
        
        long sum = 0;
        StringBuilder calculation = new StringBuilder();
        
        for (int i = 0; i < numStr.length(); i++) {
            int digit = numStr.charAt(i) - '0';
            long power = (long) Math.pow(digit, numDigits);
            sum += power;
            
            if (i > 0) calculation.append(" + ");
            calculation.append(digit).append("^").append(numDigits)
                      .append(" = ").append(power);
        }
        
        System.out.println(calculation);
        System.out.println("Сумма: " + sum);
        System.out.println("Результат: " + (sum == number ? "ДА" : "НЕТ"));
    }
    
    public static void main(String[] args) {
        int[] examples = {153, 370, 123, 9474, 1, 10, 9};
        for (int num : examples) {
            verifyArmstrong(num);
            System.out.println();
        }
    }
}

Сложность

  • Временная сложность: O(d^2), где d - количество цифр
  • Пространственная сложность: O(d) для строки

Примеры

  1. 153: 1^3 + 5^3 + 3^3 = 153 ✓
  2. 370: 3^3 + 7^3 + 0^3 = 370 ✓
  3. 9474: 9^4 + 4^4 + 7^4 + 4^4 = 9474 ✓
  4. 123: 1^3 + 2^3 + 3^3 = 36 ✗

Edge cases

  1. Отрицательные числа: false
  2. Ноль: true (0^1 = 0)
  3. Однозначные: все от 1-9 - палиндромы
  4. Большие числа: используйте long
Проверка числа Армстронга | PrepBro