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

C 프로그래밍: if문과 switch문 없이 숫자를 영어 단어로 출력하는 방법

개요

이 글에서는 주어진 숫자 값을 영어 단어 형태로 출력하는 C 프로그램을 다룹니다. 일반적으로 switch문의 case 0~9를 활용하면 쉽게 구현할 수 있지만, 이번 과제의 핵심은 if문과 switch문을 전혀 사용하지 않고 이를 해결하는 것입니다.

예시

  • 입력 − N = 900
  • 출력 − NINE ZERO ZERO

이 문제는 0부터 9까지의 숫자에 해당하는 단어들을 담은 포인터 배열을 활용하면 간단하게 해결할 수 있습니다. 문자열로 변환된 숫자의 각 자릿수를 인덱스 삼아 배열에서 단어를 꺼내 출력하는 방식입니다.

알고리즘

START
Step 1 → 정수형 변수 num, i와 포인터 배열 char *alpha를 선언하고
         {"ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"} 값으로 초기화
Step 2 → char 배열 str[20] 선언
Step 3 → itoa 함수를 num, str, 10을 매개변수로 하여 호출 (정수를 문자열로 변환)
Step 4 → i=0부터 str[i]가 '\0'이 아닐 때까지 반복
         alpha[str[i] - '0'] 출력
Step 5 → 반복 종료
STOP

구현 예제 코드

#include<stdio.h>
#include<stdlib.h>
int main() {
    int num, i;
    num = 900; // 변환할 숫자 값
    char *alpha[11] = {"ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"};
    char str[20];
    itoa(num, str, 10); // 정수를 문자열로 변환하는 함수
    for(i = 0; str[i] != '\0'; i++)
        printf("%s ", alpha[str[i] - '0']);
    return 0;
}

코드 설명

핵심 아이디어는 str[i] - '0' 연산에 있습니다. 문자 배열에 저장된 각 자릿수는 문자('9' 등) 형태이므로, 여기서 문자 '0'의 ASCII 값을 빼주면 해당 숫자의 실제 정수 값(9)이 됩니다. 이 값을 포인터 배열 alpha의 인덱스로 사용하면 조건문 없이도 각 자릿수에 대응하는 영어 단어를 바로 얻을 수 있습니다.

참고로 itoa() 함수는 표준 C 라이브러리에 공식적으로 포함되어 있지 않으므로, GCC 등 일부 컴파일러 환경에서는 sprintf(str, "%d", num)으로 대체하여 사용할 수 있습니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Enter an integer
900
NINE ZERO ZERO

이처럼 포인터 배열과 문자 연산만 활용하면 if문이나 switch문 없이도 숫자를 단어로 변환하는 프로그램을 효율적으로 작성할 수 있습니다.