C

[C언어] 각 자릿수를 순서대로 영어로 출력하는 프로그램

돌맹96 2023. 10. 5. 21:46
728x90
반응형

정수를 입력받은 후, 해당 정수가 10000보다 작은 양의 정수인 경우 각 자릿수를 순서대로 영어로 출력하는 프로그램을 구현하시오. 그렇지 않은 경우, "Invalid Input"을 출력하시오. n의 각 자릿수를 영어로 출력하시오. 이 때, 가장 큰 자릿수부터 0부터 9까지 각각 Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine로 첫 글자는 대문자여야 합니다. 더불어 각 자릿수 사이는 쉼표와 공백인 ","으로 구분되어야 합니다. n이 10000보다 작은 양의 정수가 아닌 경우 영어로 출력하는 대신 "Invalid Input"을 출력하여야 합니다.

#include <stdio.h>
#include <stdbool.h>

void printDigitInEnglish(int digit) {
    switch (digit) {
        case 0: printf("Zero"); break;
        case 1: printf("One"); break;
        case 2: printf("Two"); break;
        case 3: printf("Three"); break;
        case 4: printf("Four"); break;
        case 5: printf("Five"); break;
        case 6: printf("Six"); break;
        case 7: printf("Seven"); break;
        case 8: printf("Eight"); break;
        case 9: printf("Nine"); break;
    }
}

bool isValid(int num) {
    return num > 0 && num < 10000;
}

void printNumberInEnglish(int num) {
    if (num == 0) {
        printDigitInEnglish(0);
        return;
    }

    int divisor = 1000; // 4자리 수 최대로 가정
    bool hasStarted = false; // 최고 자릿수가 0이 아니면 true

    while (divisor > 0) {
        int currentDigit = num / divisor;
        if (currentDigit != 0 || hasStarted) {
            if (hasStarted) {
                printf(", "); // 숫자 사이에 쉼표와 공백
            }
            printDigitInEnglish(currentDigit);
            hasStarted = true;
        }
        num %= divisor;
        divisor /= 10;
    }
}

int main() {
    int num;
    scanf("%d", &num);

    if (isValid(num)) {
        printNumberInEnglish(num);
        printf("\n");
    } else {
        printf("Invalid Input\n");
    }

    return 0;
}
728x90
반응형