mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-07-09 12:11:28 +08:00
Add tests for GenericRoot
(#4276)
This commit is contained in:
@ -4,27 +4,27 @@ package com.thealgorithms.maths;
|
|||||||
* Algorithm explanation:
|
* Algorithm explanation:
|
||||||
* https://technotip.com/6774/c-program-to-find-generic-root-of-a-number/#:~:text=Generic%20Root%3A%20of%20a%20number,get%20a%20single%2Ddigit%20output.&text=For%20Example%3A%20If%20user%20input,%2B%204%20%2B%205%20%3D%2015.
|
* https://technotip.com/6774/c-program-to-find-generic-root-of-a-number/#:~:text=Generic%20Root%3A%20of%20a%20number,get%20a%20single%2Ddigit%20output.&text=For%20Example%3A%20If%20user%20input,%2B%204%20%2B%205%20%3D%2015.
|
||||||
*/
|
*/
|
||||||
public class GenericRoot {
|
public final class GenericRoot {
|
||||||
|
private GenericRoot() {
|
||||||
public static void main(String[] args) {
|
|
||||||
int number1 = 1234;
|
|
||||||
int number2 = 12345;
|
|
||||||
int result1 = genericRoot(number1);
|
|
||||||
int result2 = genericRoot(number2);
|
|
||||||
System.out.println("Generic root of " + number1 + " is: " + result1);
|
|
||||||
System.out.println("Generic root of " + number2 + " is: " + result2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int genericRoot(int n) {
|
private static int base = 10;
|
||||||
int root = 0;
|
|
||||||
while (n > 0 || root > 9) {
|
private static int sumOfDigits(final int n) {
|
||||||
if (n == 0) {
|
assert n >= 0;
|
||||||
n = root;
|
if (n < base) {
|
||||||
root = 0;
|
return n;
|
||||||
}
|
|
||||||
root += n % 10;
|
|
||||||
n /= 10;
|
|
||||||
}
|
}
|
||||||
return root;
|
return n % base + sumOfDigits(n / base);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int genericRoot(final int n) {
|
||||||
|
if (n < 0) {
|
||||||
|
return genericRoot(-n);
|
||||||
|
}
|
||||||
|
if (n > base) {
|
||||||
|
return genericRoot(sumOfDigits(n));
|
||||||
|
}
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
24
src/test/java/com/thealgorithms/maths/GenericRootTest.java
Normal file
24
src/test/java/com/thealgorithms/maths/GenericRootTest.java
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package com.thealgorithms.maths;
|
||||||
|
|
||||||
|
import static java.util.Map.entry;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class GenericRootTest {
|
||||||
|
private final Map<Integer, Integer> testCases = Map.ofEntries(entry(0, 0), entry(1, 1), entry(12345, 6), entry(123, 6), entry(15937, 7), entry(222222, 3), entry(99999, 9));
|
||||||
|
@Test
|
||||||
|
public void testGenericRoot() {
|
||||||
|
for (final var tc : testCases.entrySet()) {
|
||||||
|
assertEquals(tc.getValue(), GenericRoot.genericRoot(tc.getKey()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGenericRootWithNegativeInputs() {
|
||||||
|
for (final var tc : testCases.entrySet()) {
|
||||||
|
assertEquals(tc.getValue(), GenericRoot.genericRoot(-tc.getKey()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user