package cn.iocoder.yudao.framework.common.thealgorithms.maths;

/**
 * This class checks whether a given number is an Armstrong number or not.
 * An Armstrong number is a number that is equal to the sum of its own digits,
 * each raised to the power of the number of digits.
 *
 * For example, 370 is an Armstrong number because 3^3 + 7^3 + 0^3 = 370.
 * 1634 is an Armstrong number because 1^4 + 6^4 + 3^4 + 4^4 = 1634.
 * An Armstrong number is often called a Narcissistic number.
 *
 * @author satyabarghav
 */
public class Armstrong {

    /**
     * Checks whether a given number is an Armstrong number or not.
     *
     * @param number the number to check
     * @return {@code true} if the given number is an Armstrong number, {@code false} otherwise
     */
    public boolean isArmstrong(int number) {
        long sum = 0;
        String temp = Integer.toString(number); // Convert the given number to a string
        int power = temp.length(); // Extract the length of the number (number of digits)
        long originalNumber = number;

        while (originalNumber > 0) {
            long digit = originalNumber % 10;
            sum += (long) Math.pow(digit, power); // The digit raised to the power of the number of digits and added to the sum.
            originalNumber /= 10;
        }

        return sum == number;
    }
}
