diff --git a/src/main/java/com/thealgorithms/maths/ArmstrongNumber.java b/src/main/java/com/thealgorithms/maths/ArmstrongNumber.java new file mode 100644 index 000000000000..d6b85d125376 --- /dev/null +++ b/src/main/java/com/thealgorithms/maths/ArmstrongNumber.java @@ -0,0 +1,37 @@ +package com.thealgorithms.maths; + +/** + * 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: 153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153 + * + * @author duvvuvenkataramana + */ +public final class ArmstrongNumber { + private ArmstrongNumber() { + } + + /** + * Checks if a number is an Armstrong number. + * + * @param number the number to check + * @return {@code true} if Armstrong number, {@code false} otherwise + */ + public static boolean isArmstrong(int number) { + if (number < 0) { + return false; + } + + int original = number; + int numDigits = String.valueOf(number).length(); + int sum = 0; + + while (number > 0) { + int digit = number % 10; + sum += (int) Math.pow(digit, numDigits); + number /= 10; + } + + return sum == original; + } +} diff --git a/src/test/java/com/thealgorithms/maths/ArmstrongNumberTest.java b/src/test/java/com/thealgorithms/maths/ArmstrongNumberTest.java new file mode 100644 index 000000000000..bb627bde89fd --- /dev/null +++ b/src/test/java/com/thealgorithms/maths/ArmstrongNumberTest.java @@ -0,0 +1,49 @@ +package com.thealgorithms.maths; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; + +class ArmstrongNumberTest { + @Test + void testSingleDigitNumbers() { + for (int i = 0; i <= 9; i++) { + assertTrue(ArmstrongNumber.isArmstrong(i)); + } + } + + @Test + void testThreeDigitArmstrongNumbers() { + assertTrue(ArmstrongNumber.isArmstrong(153)); + assertTrue(ArmstrongNumber.isArmstrong(370)); + assertTrue(ArmstrongNumber.isArmstrong(371)); + assertTrue(ArmstrongNumber.isArmstrong(407)); + } + + @Test + void testFourDigitArmstrongNumbers() { + assertTrue(ArmstrongNumber.isArmstrong(1634)); + assertTrue(ArmstrongNumber.isArmstrong(8208)); + assertTrue(ArmstrongNumber.isArmstrong(9474)); + } + + @Test + void testNonArmstrongNumbers() { + assertFalse(ArmstrongNumber.isArmstrong(10)); + assertFalse(ArmstrongNumber.isArmstrong(100)); + assertFalse(ArmstrongNumber.isArmstrong(123)); + assertFalse(ArmstrongNumber.isArmstrong(999)); + } + + @Test + void testNegativeNumbers() { + assertFalse(ArmstrongNumber.isArmstrong(-1)); + assertFalse(ArmstrongNumber.isArmstrong(-153)); + } + + @Test + void testZero() { + assertTrue(ArmstrongNumber.isArmstrong(0)); + } +}