Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions src/main/java/com/thealgorithms/maths/ArmstrongNumber.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
49 changes: 49 additions & 0 deletions src/test/java/com/thealgorithms/maths/ArmstrongNumberTest.java
Original file line number Diff line number Diff line change
@@ -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));
}
}