Skip to content

Commit 47af70e

Browse files
committed
Digit Separation Algorithm added
1 parent 51be6aa commit 47af70e

File tree

1 file changed

+129
-0
lines changed

1 file changed

+129
-0
lines changed
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
#include <algorithm>
2+
#include <cmath>
3+
#include <iostream>
4+
#include <vector>
5+
#include <cassert>
6+
7+
/**
8+
* @brief A class that provides methods to separate the digits of a large
9+
* positive number.
10+
*/
11+
class DigitSeparation {
12+
public:
13+
/**
14+
* @brief Default constructor for the DigitSeparation class.
15+
*/
16+
DigitSeparation() {}
17+
18+
/**
19+
* @brief Separates the digits of a large positive number into a vector in
20+
* reverse order.
21+
*
22+
* @param largeNumber The large number to separate digits from.
23+
* @return A vector of digits in reverse order.
24+
*/
25+
std::vector<long long> digitSeparationReverseOrder(
26+
long long largeNumber) const;
27+
28+
/**
29+
* @brief Separates the digits of a large positive number into a vector in
30+
* forward order.
31+
*
32+
* @param largeNumber The large number to separate digits from.
33+
* @return A vector of digits in forward order.
34+
*/
35+
std::vector<long long> digitSeparationForwardOrder(
36+
long long largeNumber) const;
37+
};
38+
39+
/**
40+
* @brief Implementation of digitSeparationReverseOrder method.
41+
*
42+
* @param largeNumber The large number to separate digits from.
43+
* @return A vector of digits in reverse order.
44+
*/
45+
std::vector<long long> DigitSeparation::digitSeparationReverseOrder(
46+
long long largeNumber) const {
47+
std::vector<long long> result;
48+
if (largeNumber != 0) {
49+
while (largeNumber != 0) {
50+
result.push_back(std::abs(largeNumber % 10));
51+
largeNumber /= 10;
52+
}
53+
} else {
54+
result.push_back(0);
55+
}
56+
return result;
57+
}
58+
59+
/**
60+
* @brief Implementation of digitSeparationForwardOrder method.
61+
*
62+
* @param largeNumber The large number to separate digits from.
63+
* @return A vector of digits in forward order.
64+
*/
65+
std::vector<long long> DigitSeparation::digitSeparationForwardOrder(
66+
long long largeNumber) const {
67+
std::vector<long long> result = digitSeparationReverseOrder(largeNumber);
68+
std::reverse(result.begin(), result.end());
69+
return result;
70+
}
71+
72+
int main() {
73+
DigitSeparation ds;
74+
75+
// Test case: Positive number
76+
long long number = 1234567890;
77+
std::vector<long long> expectedReverse = {0, 9, 8, 7, 6, 5, 4, 3, 2, 1};
78+
std::vector<long long> expectedForward = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
79+
80+
// Testing reverse order
81+
std::vector<long long> reverseOrder = ds.digitSeparationReverseOrder(number);
82+
assert(reverseOrder == expectedReverse);
83+
84+
// Testing forward order
85+
std::vector<long long> forwardOrder = ds.digitSeparationForwardOrder(number);
86+
assert(forwardOrder == expectedForward);
87+
88+
// Test case: Single digit number
89+
number = 5;
90+
expectedReverse = {5};
91+
expectedForward = {5};
92+
93+
reverseOrder = ds.digitSeparationReverseOrder(number);
94+
assert(reverseOrder == expectedReverse);
95+
96+
forwardOrder = ds.digitSeparationForwardOrder(number);
97+
assert(forwardOrder == expectedForward);
98+
99+
// Test case: Zero
100+
number = 0;
101+
expectedReverse = {0};
102+
expectedForward = {0};
103+
104+
reverseOrder = ds.digitSeparationReverseOrder(number);
105+
assert(reverseOrder == expectedReverse);
106+
107+
forwardOrder = ds.digitSeparationForwardOrder(number);
108+
assert(forwardOrder == expectedForward);
109+
110+
// Test case: Large number
111+
number = 987654321012345;
112+
expectedReverse = {5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
113+
expectedForward = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5};
114+
115+
reverseOrder = ds.digitSeparationReverseOrder(number);
116+
assert(reverseOrder == expectedReverse);
117+
118+
forwardOrder = ds.digitSeparationForwardOrder(number);
119+
assert(forwardOrder == expectedForward);
120+
121+
// Test case: Negative number
122+
number = -987654321012345;
123+
expectedReverse = {5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
124+
expectedForward = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5};
125+
126+
std::cout << "All tests passed!" << std::endl;
127+
128+
return 0;
129+
}

0 commit comments

Comments
 (0)