C#으로 숫자를 영어 단어로 변환하는 프로그램 만들기
이번 글에서는 C#을 사용하여 정수를 각 자릿수별 영어 단어로 변환하는 프로그램을 만들어 보겠습니다. 예를 들어 4677이라는 숫자를 입력하면 four six seven seven처럼 출력되는 방식입니다.
1단계: 0부터 9까지의 단어 배열 선언
가장 먼저 각 자릿수(0~9)에 해당하는 영어 단어를 문자열 배열로 선언합니다. 이 배열은 나중에 추출한 자릿수를 인덱스로 사용해 해당 단어를 찾는 역할을 합니다.
// 0부터 9까지 각 자릿수에 해당하는 단어
string[] digits_words = { "zero", "one", "two",
"three", "four", "five",
"six", "seven", "eight",
"nine"
};
2단계: 변환할 숫자 설정
단어로 변환할 숫자를 변수에 저장하고 콘솔에 출력합니다.
// 단어로 변환할 숫자
val = 4677;
Console.WriteLine("Number: " + val);
3단계: 루프로 각 자릿수 추출하기
do-while 루프와 나머지 연산자(%), 나눗셈 연산자(/)를 활용하면 숫자의 자릿수를 하나씩 분리할 수 있습니다. val % 10은 마지막 자릿수를 반환하고, val / 10은 마지막 자릿수를 제거한 값을 남깁니다. 이 과정을 반복하면 각 자릿수가 배열에 저장됩니다.
do {
next = val % 10;
a[num_digits] = next;
num_digits++;
val = val / 10;
} while(val > 0);자릿수는 뒤에서부터 추출되므로, 마지막에는 배열을 역순으로 순회하며 원래 순서대로 단어를 출력해야 합니다.
전체 예제 코드
아래는 위의 내용을 모두 합친 완성된 C# 코드입니다. 직접 실행해 보면서 동작을 확인해 보세요.
using System;
using System.Collections.Generic;
using System.Text;
namespace Demo {
class MyApplication {
static void Main(string[] args) {
int val, next, num_digits;
int[] a = new int[10];
// 0부터 9까지 각 자릿수에 해당하는 단어
string[] digits_words = {
"zero",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine"
};
// 단어로 변환할 숫자
val = 4677;
Console.WriteLine("Number: " + val);
Console.Write("Number (words): ");
next = 0;
num_digits = 0;
do {
next = val % 10;
a[num_digits] = next;
num_digits++;
val = val / 10;
} while (val > 0);
num_digits--;
for (; num_digits >= 0; num_digits--)
Console.Write(digits_words[a[num_digits]] + " ");
Console.ReadLine();
}
}
}
실행 결과
Number: 4677
Number (words): four six seven seven
코드 동작 원리 정리
이 프로그램의 핵심 로직은 다음과 같습니다.
1. 자릿수 분리: do-while 루프 안에서 val % 10으로 일의 자리 숫자를 얻고, val / 10으로 그 자릿수를 제거합니다. 값이 0이 될 때까지 반복합니다.
2. 배열 저장: 추출된 자릿수는 a[] 배열에 차례대로 저장됩니다. 이때 순서는 실제 숫자의 역순입니다.
3. 역순 출력: num_digits를 하나 감소시킨 후 for 루프로 배열을 뒤에서 앞으로 순회하며, 저장된 자릿수를 인덱스로 digits_words 배열에서 단어를 찾아 출력합니다.
이 방식은 음수나 소수는 처리하지 못하지만, 0 이상의 정수라면 어떤 숫자든 손쉽게 영어 단어로 변환할 수 있습니다. 필요에 따라 음수 처리나 두 자리 이상 단위(ten, hundred 등) 확장 기능을 추가해 볼 수도 있습니다.