diff --git a/pmd-exclude.properties b/pmd-exclude.properties index fb8470d8ba81..f2e35f43887e 100644 --- a/pmd-exclude.properties +++ b/pmd-exclude.properties @@ -41,7 +41,6 @@ com.thealgorithms.dynamicprogramming.WineProblem=UselessParentheses com.thealgorithms.maths.BinomialCoefficient=UselessParentheses com.thealgorithms.maths.Complex=UselessParentheses com.thealgorithms.maths.DistanceFormulaTest=UnnecessaryFullyQualifiedName -com.thealgorithms.maths.DudeneyNumber=UselessParentheses com.thealgorithms.maths.FibonacciJavaStreamsTest=BigIntegerInstantiation com.thealgorithms.maths.Gaussian=UselessParentheses com.thealgorithms.maths.GcdSolutionWrapper=UselessParentheses diff --git a/src/main/java/com/thealgorithms/maths/DudeneyNumber.java b/src/main/java/com/thealgorithms/maths/DudeneyNumber.java index c8c8820d3a5f..88e008cf8a08 100644 --- a/src/main/java/com/thealgorithms/maths/DudeneyNumber.java +++ b/src/main/java/com/thealgorithms/maths/DudeneyNumber.java @@ -11,28 +11,18 @@ private DudeneyNumber() { } // returns True if the number is a Dudeney number and False if it is not a Dudeney number. - public static boolean isDudeney(int n) { + public static boolean isDudeney(final int n) { + if (n <= 0) { + throw new IllegalArgumentException("Input must me positive."); + } // Calculating Cube Root - int cube_root = (int) (Math.round((Math.pow(n, 1.0 / 3.0)))); + final int cube_root = (int) Math.round(Math.pow(n, 1.0 / 3.0)); // If the number is not a perfect cube the method returns false. if (cube_root * cube_root * cube_root != n) { return false; } - int sum_of_digits = 0; // Stores the sums of the digits of the entered number - int temp = n; // A temporary variable to store the entered number - // Loop to calculate the sum of the digits. - while (temp > 0) { - // Extracting the Last digit of the number - int rem = temp % 10; - - // Calculating the sum of digits. - sum_of_digits += rem; - - // Removing the last digit - temp /= 10; - } // If the cube root of the number is not equal to the sum of its digits, we return false. - return cube_root == sum_of_digits; + return cube_root == SumOfDigits.sumOfDigits(n); } } diff --git a/src/test/java/com/thealgorithms/maths/DudeneyNumberTest.java b/src/test/java/com/thealgorithms/maths/DudeneyNumberTest.java index 718a1def5eb8..cd93edfae61d 100644 --- a/src/test/java/com/thealgorithms/maths/DudeneyNumberTest.java +++ b/src/test/java/com/thealgorithms/maths/DudeneyNumberTest.java @@ -1,18 +1,28 @@ package com.thealgorithms.maths; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; class DudeneyNumberTest { + @ParameterizedTest + @CsvSource({"1", "512", "4913", "5832", "17576", "19683"}) + void positiveDudeneyBase10Power3(final int n) { + assertTrue(DudeneyNumber.isDudeney(n)); + } - @Test - void isDudeney() { - final int validDudeneyNumber = 512; - final int invalidDudeneyNumber = 125; + @ParameterizedTest + @CsvSource({"2", "19", "21", "125", "27", "343", "729", "19682", "19684"}) + void negativeDudeneyBase10Power3(final int n) { + assertFalse(DudeneyNumber.isDudeney(n)); + } - assertTrue(() -> DudeneyNumber.isDudeney(validDudeneyNumber)); - assertFalse(() -> DudeneyNumber.isDudeney(invalidDudeneyNumber)); + @ParameterizedTest + @CsvSource({"0", "-1"}) + void throwsInputLessThanOne(final int n) { + assertThrows(IllegalArgumentException.class, () -> DudeneyNumber.isDudeney(n)); } }