Skip to content

Commit 5cbdb47

Browse files
authored
Add digit separation for large integers (#5543)
1 parent de22158 commit 5cbdb47

File tree

2 files changed

+118
-0
lines changed

2 files changed

+118
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.thealgorithms.greedyalgorithms;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.List;
6+
7+
/**
8+
* This class provides methods to separate the digits of a large positive number into a list.
9+
*/
10+
public class DigitSeparation {
11+
public DigitSeparation() {
12+
}
13+
/**
14+
* Separates the digits of a large positive number into a list in reverse order.
15+
* @param largeNumber The large number to separate digits from.
16+
* @return A list of digits in reverse order.
17+
*/
18+
public List<Long> digitSeparationReverseOrder(long largeNumber) {
19+
List<Long> result = new ArrayList<>();
20+
if (largeNumber != 0) {
21+
while (largeNumber != 0) {
22+
result.add(Math.abs(largeNumber % 10));
23+
largeNumber = largeNumber / 10;
24+
}
25+
} else {
26+
result.add(0L);
27+
}
28+
return result;
29+
}
30+
/**
31+
* Separates the digits of a large positive number into a list in forward order.
32+
* @param largeNumber The large number to separate digits from.
33+
* @return A list of digits in forward order.
34+
*/
35+
public List<Long> digitSeparationForwardOrder(long largeNumber) {
36+
List<Long> result = this.digitSeparationReverseOrder(largeNumber);
37+
Collections.reverse(result);
38+
return result;
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package com.thealgorithms.greedyalgorithms;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import java.util.List;
6+
import org.junit.jupiter.api.Test;
7+
public class DigitSeparationTest {
8+
9+
@Test
10+
public void testDigitSeparationReverseOrderSingleDigit() {
11+
DigitSeparation digitSeparation = new DigitSeparation();
12+
List<Long> result = digitSeparation.digitSeparationReverseOrder(5);
13+
assertEquals(List.of(5L), result);
14+
}
15+
16+
@Test
17+
public void testDigitSeparationReverseOrderMultipleDigits() {
18+
DigitSeparation digitSeparation = new DigitSeparation();
19+
List<Long> result = digitSeparation.digitSeparationReverseOrder(123);
20+
assertEquals(List.of(3L, 2L, 1L), result);
21+
}
22+
23+
@Test
24+
public void testDigitSeparationReverseOrderLargeNumber() {
25+
DigitSeparation digitSeparation = new DigitSeparation();
26+
List<Long> result = digitSeparation.digitSeparationReverseOrder(123456789);
27+
assertEquals(List.of(9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 1L), result);
28+
}
29+
30+
@Test
31+
public void testDigitSeparationReverseOrderZero() {
32+
DigitSeparation digitSeparation = new DigitSeparation();
33+
List<Long> result = digitSeparation.digitSeparationReverseOrder(0);
34+
assertEquals(List.of(0L), result);
35+
}
36+
37+
@Test
38+
public void testDigitSeparationReverseOrderNegativeNumbers() {
39+
DigitSeparation digitSeparation = new DigitSeparation();
40+
List<Long> result = digitSeparation.digitSeparationReverseOrder(-123);
41+
assertEquals(List.of(3L, 2L, 1L), result);
42+
}
43+
44+
@Test
45+
public void testDigitSeparationForwardOrderSingleDigit() {
46+
DigitSeparation digitSeparation = new DigitSeparation();
47+
List<Long> result = digitSeparation.digitSeparationForwardOrder(5);
48+
assertEquals(List.of(5L), result);
49+
}
50+
51+
@Test
52+
public void testDigitSeparationForwardOrderMultipleDigits() {
53+
DigitSeparation digitSeparation = new DigitSeparation();
54+
List<Long> result = digitSeparation.digitSeparationForwardOrder(123);
55+
assertEquals(List.of(1L, 2L, 3L), result);
56+
}
57+
58+
@Test
59+
public void testDigitSeparationForwardOrderLargeNumber() {
60+
DigitSeparation digitSeparation = new DigitSeparation();
61+
List<Long> result = digitSeparation.digitSeparationForwardOrder(123456789);
62+
assertEquals(List.of(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L), result);
63+
}
64+
65+
@Test
66+
public void testDigitSeparationForwardOrderZero() {
67+
DigitSeparation digitSeparation = new DigitSeparation();
68+
List<Long> result = digitSeparation.digitSeparationForwardOrder(0);
69+
assertEquals(List.of(0L), result);
70+
}
71+
72+
@Test
73+
public void testDigitSeparationForwardOrderNegativeNumber() {
74+
DigitSeparation digitSeparation = new DigitSeparation();
75+
List<Long> result = digitSeparation.digitSeparationForwardOrder(-123);
76+
assertEquals(List.of(1L, 2L, 3L), result);
77+
}
78+
}

0 commit comments

Comments
 (0)