큰 수를 표현할 때 자릿수를 쉽게 구분하기 위해 천단위 구분 기호인 콤마(,)를 사용한다.
어떤 수가 입력되면 천단위 구분 기호를 넣어 그 수를 다시 출력하는 프로그램을 작성하시오.
첫째 줄에 숫자의 길이 n이 입력된다. (1≤n≤200)
둘째 줄에 길이가 n인 숫자가 입력된다.
천단위 구분기호 콤마를 넣어 출력하시오.
#include <iostream>
using namespace std;
enum { eMaxCount = 100001, eInvalid = -1 };
class Stack
{
public:
Stack()
: muTopIndex(0u)
, StackSize(0)
{
}
void Push(int _iData)
{
if (eMaxCount <= muTopIndex)
{
cout << "Stack overflow!" << endl;
return;
}
StackSize++;
miarrData[muTopIndex++] = _iData;
}
bool IsEmpty(void)
{
return -1 == muTopIndex;
}
int Size()
{
return StackSize;
}
int Top(void)
{
if (true == IsEmpty())
{
cout << "Stack underflow!" << endl;
return eInvalid;
}
return miarrData[muTopIndex];
}
void Pop(void)
{
if (true == IsEmpty())
{
cout << "Stack underflow!" << endl;
return;
}
StackSize--;
muTopIndex--;
}
private:
int miarrData[eMaxCount];
unsigned int muTopIndex;
int StackSize;
};
void Recursive(Stack* _Stack, int _Comma, bool First = true)
{
if (_Stack->Size() < 0)
{
return;
}
if (_Comma != 0)
{
--_Comma;
std::cout << _Stack->Top();
_Stack->Pop();
Recursive(_Stack, _Comma, false);
}
else
{
if (First == false)
{
std::cout << ',';
}
_Comma = 3;
Recursive(_Stack, _Comma, false);
}
}
int main()
{
int NumLength = 0;
char Num[200] = {0, };
Stack* NewStack = new Stack();
cin >> NumLength;
for (int i = 0; i < NumLength; i++)
{
cin >> Num[i];
}
int Comma = NumLength % 3;
for (int i = NumLength-1; i >= 0; i--)
{
NewStack->Push(Num[i]-'0');
}
NewStack->Pop();
Recursive(NewStack, Comma);
}