개요
이 글에서는 C++을 사용해 정수의 각 자릿수를 확대하여 출력하는 방법을 알아봅니다. 여기서 말하는 '확대'란 실제 숫자 대신 # 같은 다른 문자를 활용해 훨씬 큰 형태로 숫자를 그려내는 것을 의미합니다.
핵심 로직은 생각보다 단순합니다. 먼저 0부터 9까지 각 숫자를 5×5 크기의 문자 패턴으로 하나씩 정의한 뒤, 입력받은 정수를 문자열로 변환하고 각 자릿수에 해당하는 패턴을 순서대로 화면에 출력하면 됩니다.
동작 원리
프로그램은 크게 세 부분으로 구성됩니다.
1. 숫자별 출력 함수
print_zero()부터 print_nine()까지 총 10개의 함수가 있으며, 각 함수는 2중 반복문으로 5×5 격자를 순회하면서 조건문에 따라 '#' 또는 공백을 출력해 숫자 모양을 완성합니다.
2. zoom_digit() 함수
입력받은 정수를 stringstream으로 문자열로 변환한 후, 각 문자를 switch문으로 판별하여 대응하는 출력 함수를 호출합니다. str[k]-'0' 연산을 통해 문자형 숫자를 정수값으로 손쉽게 변환할 수 있습니다.
3. main() 함수
예시로 long long 타입의 숫자 125478539를 zoom_digit() 함수에 전달해 실행 결과를 확인합니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
void print_zero() {
for (int i=0; i<5; i++) {
for (int j=0; j<5; j++) {
if (i==0 || i==4)
cout << '#';
else if (j==0 || j==4)
cout << '#';
else
cout << " ";
}
cout << endl;
}
}
void print_one() {
for (int i=0; i<5; i++) {
for (int j=0; j<5; j++) {
if (j==2)
cout << '#';
else if ((i==1 && j==1))
cout << '#';
else if (i==4)
cout << '#';
else
cout << " ";
}
cout << endl;
}
}
void print_two() {
for (int i=0; i<5; i++) {
for (int j=0; j<4; j++) {
if (i==0 && j==4)
cout << " ";
else if (i==0 || i==4)
cout << '#';
else if (i==1 && j==0)
cout << '#';
else if (i==(4-j))
cout << '#';
else
cout << " ";
}
cout << endl;
}
}
void print_three() {
for (int i=0; i<5; i++) {
for (int j=0; j<5; j++) {
if (i==0 || i==2 || i==4)
cout << '#';
else if (j==4)
cout << '#';
else
cout << " ";
}
cout << endl;
}
}
void print_four() {
for (int i=0; i<5; i++) {
for (int j=0; j<5; j++) {
if (j==4)
cout << '#';
else if (i==2)
cout << '#';
else if (j==0 && (i==0 || i==1))
cout << '#';
else
cout << " ";
}
cout << endl;
}
}
void print_five() {
for (int i=0; i<5; i++) {
for (int j=0; j<5; j++) {
if (i==0 || i==2 || i==4)
cout << '#';
else if ((j==0 && i==1) ||
(j==4 && i==3))
cout << '#';
else
cout << " ";
}
cout << endl;
}
}
void print_six() {
for (int i=0; i<5; i++) {
for (int j=0; j<5; j++) {
if (i==0 || i==2 || i==4)
cout << '#';
else if ((j==0 && (i==1 || i==3)) ||
(j==4 && i==3))
cout << '#';
else
cout << " ";
}
cout << endl;
}
}
void print_seven() {
for (int i=0 ; i<5; i++) {
for (int j=0 ; j<5; j++) {
if (i==0 && (j!=4))
cout << '#';
else if (i==2 && (j==2 || j==4))
cout << '#';
else if (j==3)
cout << '#';
else
cout << " ";
}
cout << endl;
}
}
void print_eight() {
for (int i=0; i<5; i++) {
for (int j=0; j<5; j++) {
if (i==0 || i==2 || i==4)
cout << '#';
else if ((j==0 && (i==1 || i==3) ||
(j==4 && (i==1 || i==3))))
cout << '#';
else
cout << " ";
}
cout << endl;
}
}
void print_nine() {
for (int i=0; i<5; i++) {
for (int j=0; j<5; j++) {
if ( i==0 || i==2 || j==4)
cout << '#';
else if (i==1 && j==0)
cout << '#';
else
cout << " ";
}
cout << endl;
}
}
void zoom_digit(int number) {
// 숫자를 문자열로 변환
stringstream ss;
ss << number;
string str = ss.str();
for (int k=0; k<str.length(); k++) {
cout << endl;
switch(str[k]-'0'){
case 0:
print_zero();
continue;
case 1:
print_one();
continue;
case 2:
print_two();
continue;
case 3:
print_three();
continue;
case 4:
print_four();
continue;
case 5:
print_five();
continue;
case 6:
print_six();
continue;
case 7:
print_seven();
continue;
case 8:
print_eight();
continue;
case 9:
print_nine();
continue;
}
}
}
int main() {
long long number = 125478539;
zoom_digit(number);
}
실행 결과
위 코드를 컴파일하여 실행하면 입력된 숫자 125478539의 각 자릿수가 아래와 같이 '#' 문자로 이루어진 큰 숫자 모양으로 차례대로 출력됩니다.

마무리
이 프로그램은 2중 반복문과 조건문만으로 ASCII 아트 형태의 숫자 출력기를 구현한 좋은 예제입니다. 패턴의 크기를 늘리거나 출력 문자를 '*' 등으로 바꾸는 식으로 응용할 수 있으며, 디지털 시계나 점수판처럼 숫자를 시각적으로 강조해야 하는 콘솔 프로그램에도 활용할 수 있습니다.