From 6ecb0a3cff87460a5a5225f908108e8d82677d86 Mon Sep 17 00:00:00 2001 From: duvvuvenkataramana Date: Sun, 23 Nov 2025 23:59:44 +0530 Subject: [PATCH 1/3] Add Armstrong Number algorithm with comprehensive tests - Implemented ArmstrongNumber.isArmstrong() method - Added comprehensive unit tests for Armstrong numbers - Includes documentation with examples - Handles edge cases (negative numbers, zero) - Tests cover known Armstrong numbers: 0, 1, 153, 370, 371, 407, 1634 Signed-off-by: duvvuvenkataramana --- .../thealgorithms/maths/ArmstrongNumber.java | 37 +++++++++++++++++++ .../maths/ArmstrongNumberTest.java | 37 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 src/main/java/com/thealgorithms/maths/ArmstrongNumber.java create mode 100644 src/test/java/com/thealgorithms/maths/ArmstrongNumberTest.java 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..9e9ecda43d0d --- /dev/null +++ b/src/main/java/com/thealgorithms/maths/ArmstrongNumber.java @@ -0,0 +1,37 @@ +package com.thealgorithms.maths; + +/** + * Armstrong Number (also known as Narcissistic Number) + * A number is called an Armstrong number if the sum of cubes of its digits equals the number itself. + * For example: 153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153 + * + * @author duvvuvenkataramana + */ +public final class ArmstrongNumber { + private ArmstrongNumber() { + } + + /** + * Check if a number is an Armstrong number + * + * @param number the number to check + * @return true if the number is an Armstrong number, false otherwise + */ + public static boolean isArmstrong(int number) { + if (number < 0) { + return false; + } + + int original = number; + int sum = 0; + int digits = String.valueOf(number).length(); + + while (number > 0) { + int digit = number % 10; + sum += Math.pow(digit, digits); + 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..ce7401115371 --- /dev/null +++ b/src/test/java/com/thealgorithms/maths/ArmstrongNumberTest.java @@ -0,0 +1,37 @@ +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 testArmstrongNumbers() { + // Test known Armstrong numbers + assertTrue(ArmstrongNumber.isArmstrong(0)); + assertTrue(ArmstrongNumber.isArmstrong(1)); + assertTrue(ArmstrongNumber.isArmstrong(153)); + assertTrue(ArmstrongNumber.isArmstrong(370)); + assertTrue(ArmstrongNumber.isArmstrong(371)); + assertTrue(ArmstrongNumber.isArmstrong(407)); + assertTrue(ArmstrongNumber.isArmstrong(1634)); + } + + @Test + void testNonArmstrongNumbers() { + // Test numbers that are not Armstrong numbers + assertFalse(ArmstrongNumber.isArmstrong(10)); + assertFalse(ArmstrongNumber.isArmstrong(100)); + assertFalse(ArmstrongNumber.isArmstrong(152)); + assertFalse(ArmstrongNumber.isArmstrong(200)); + } + + @Test + void testNegativeNumbers() { + // Negative numbers cannot be Armstrong numbers + assertFalse(ArmstrongNumber.isArmstrong(-1)); + assertFalse(ArmstrongNumber.isArmstrong(-153)); + } +} From 31309a639da15ab8d190e363aefe351b69fecb3c Mon Sep 17 00:00:00 2001 From: duvvuvenkataramana Date: Mon, 24 Nov 2025 00:05:23 +0530 Subject: [PATCH 2/3] Fix compilation warning: add explicit cast for Math.pow - Added explicit cast from double to int for Math.pow result - Resolves 'implicit cast is possibly lossy' compiler warning - Project uses -Werror flag which treats warnings as errors Signed-off-by: duvvuvenkataramana --- src/main/java/com/thealgorithms/maths/ArmstrongNumber.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/maths/ArmstrongNumber.java b/src/main/java/com/thealgorithms/maths/ArmstrongNumber.java index 9e9ecda43d0d..a25b587f2414 100644 --- a/src/main/java/com/thealgorithms/maths/ArmstrongNumber.java +++ b/src/main/java/com/thealgorithms/maths/ArmstrongNumber.java @@ -28,7 +28,7 @@ public static boolean isArmstrong(int number) { while (number > 0) { int digit = number % 10; - sum += Math.pow(digit, digits); + sum += (int) Math.pow(digit, digits); number /= 10; } From ff76aa36eb3d856acbf9b056d1012df326a7e922 Mon Sep 17 00:00:00 2001 From: duvvuvenkataramana Date: Mon, 24 Nov 2025 04:20:19 +0530 Subject: [PATCH 3/3] Fix checkstyle violations and add explicit cast --- .../thealgorithms/maths/ArmstrongNumber.java | 14 +++++----- .../maths/ArmstrongNumberTest.java | 28 +++++++++++++------ 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/ArmstrongNumber.java b/src/main/java/com/thealgorithms/maths/ArmstrongNumber.java index a25b587f2414..d6b85d125376 100644 --- a/src/main/java/com/thealgorithms/maths/ArmstrongNumber.java +++ b/src/main/java/com/thealgorithms/maths/ArmstrongNumber.java @@ -1,9 +1,9 @@ package com.thealgorithms.maths; /** - * Armstrong Number (also known as Narcissistic Number) - * A number is called an Armstrong number if the sum of cubes of its digits equals the number itself. - * For example: 153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153 + * 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 */ @@ -12,10 +12,10 @@ private ArmstrongNumber() { } /** - * Check if a number is an Armstrong number + * Checks if a number is an Armstrong number. * * @param number the number to check - * @return true if the number is an Armstrong number, false otherwise + * @return {@code true} if Armstrong number, {@code false} otherwise */ public static boolean isArmstrong(int number) { if (number < 0) { @@ -23,12 +23,12 @@ public static boolean isArmstrong(int number) { } int original = number; + int numDigits = String.valueOf(number).length(); int sum = 0; - int digits = String.valueOf(number).length(); while (number > 0) { int digit = number % 10; - sum += (int) Math.pow(digit, digits); + sum += (int) Math.pow(digit, numDigits); number /= 10; } diff --git a/src/test/java/com/thealgorithms/maths/ArmstrongNumberTest.java b/src/test/java/com/thealgorithms/maths/ArmstrongNumberTest.java index ce7401115371..bb627bde89fd 100644 --- a/src/test/java/com/thealgorithms/maths/ArmstrongNumberTest.java +++ b/src/test/java/com/thealgorithms/maths/ArmstrongNumberTest.java @@ -6,32 +6,44 @@ import org.junit.jupiter.api.Test; class ArmstrongNumberTest { + @Test + void testSingleDigitNumbers() { + for (int i = 0; i <= 9; i++) { + assertTrue(ArmstrongNumber.isArmstrong(i)); + } + } @Test - void testArmstrongNumbers() { - // Test known Armstrong numbers - assertTrue(ArmstrongNumber.isArmstrong(0)); - assertTrue(ArmstrongNumber.isArmstrong(1)); + 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() { - // Test numbers that are not Armstrong numbers assertFalse(ArmstrongNumber.isArmstrong(10)); assertFalse(ArmstrongNumber.isArmstrong(100)); - assertFalse(ArmstrongNumber.isArmstrong(152)); - assertFalse(ArmstrongNumber.isArmstrong(200)); + assertFalse(ArmstrongNumber.isArmstrong(123)); + assertFalse(ArmstrongNumber.isArmstrong(999)); } @Test void testNegativeNumbers() { - // Negative numbers cannot be Armstrong numbers assertFalse(ArmstrongNumber.isArmstrong(-1)); assertFalse(ArmstrongNumber.isArmstrong(-153)); } + + @Test + void testZero() { + assertTrue(ArmstrongNumber.isArmstrong(0)); + } }