Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 정수의 각 자릿수를 크게 확대해 출력하는 프로그램

개요

이 글에서는 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의 각 자릿수가 아래와 같이 '#' 문자로 이루어진 큰 숫자 모양으로 차례대로 출력됩니다.

C++로 정수의 각 자릿수를 크게 확대해 출력하는 프로그램

마무리

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