728x90
▶문제 : 숫자를 한글로 변환 (codeup.kr)
▶코드 작성(아래에 wchar_t 버전 있음)
#include <stdio.h>
#include <string.h>
int main()
{
char num[9][4] = {
"일", "이", "삼", "사", "오", "육", "칠", "팔", "구"};
char unit[9][4] = {
"십", "백", "천", "", "십", "백", "천", "", "십"};
char bUnit[2][4] = {"만", "억"};
char string[30][4]; //숫자담는 문자열
int n, i, temp, cUnit = 0, len = 0;
scanf("%d", &n);
if (n == 0)// 0일 때
{
printf("영");
return 1;
}
while (n >= 1)
{
temp = n % 10;
n /= 10;
if (temp > 0) //0이 아닐 때
{
if (cUnit >= 4 && cUnit < 8) //"만"이 들어가야 될 때
{
strcpy(string[len++], bUnit[0]);
strcpy(bUnit[0], ""); //한번만 넣기 위해
}
if (cUnit >= 8) //"억"이 들어가야 될 때
{
strcpy(string[len++], bUnit[1]);
strcpy(bUnit[1], ""); //한번만 넣기 위해
}
if (cUnit > 0) //"십","백","천"이 들어가야 될 때
{
strcpy(string[len++], unit[cUnit - 1]);
}
strcpy(string[len++], num[temp - 1]); //"일","이",...숫자를 복사해서 넣음
}
cUnit++; //"십","백","천"이 들어가야 될 자리 구하는 변수
}
for (i = len - 1; i >= 0; i--)//거꾸로 출력
{
printf("%s", string[i]);
}
return 0;
}
위 코드는 정답용 코드로 바꾼 것이고 아래 wchar_t를 사용해 만든 코드가 처음 짠 코드인데 <locale.h> 헤더가 codeup에 안 먹혀서 다시 만들게 되었다...
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main()
{
wchar_t num[9][2] = {
L"일", L"이", L"삼", L"사", L"오", L"육", L"칠", L"팔", L"구"};
wchar_t unit[9][2] = {
L"십", L"백", L"천", L"", L"십", L"백", L"천", L"", L"십"};
wchar_t bUnit[2][2] = {L"만", L"억"};
wchar_t string[20]; //숫자 담는 문자열
_wsetlocale(LC_ALL, L"Korean"); // wchar_t 문자열 한국어로 출력
int n, i, temp, cUnit = 0;
scanf("%d", &n);
if (n == 0)// 0일 때
{
wprintf(L"영");
return 1;
}
wcscpy(string, L"");//string 문자열을 아무것도 없는 상태로 초기화
while (n >= 1)
{
temp = n % 10;
n /= 10;
if (temp > 0)//0이 아닐 때
{
if (cUnit >= 4 && cUnit < 8)//"만"이 들어가야 될 때
{
wcscat(string, bUnit[0]);
wcscpy(bUnit[0], L"");//한번만 넣기 위해
}
if (cUnit >= 8)//"억"이 들어가야 될 때
{
wcscat(string, bUnit[1]);
wcscpy(bUnit[1], L"");//한번만 넣기 위해
}
if (cUnit > 0)//"십","백","천"이 들어가야 될 때
{
wcscat(string, unit[cUnit - 1]);
}
wcscat(string, num[temp - 1]);//"일","이",...숫자를 복사해서 넣음
}
cUnit++;//"십","백","천"이 들어가야 될 자리 구하는 변수
}
for (i = wcslen(string) - 1; i >= 0; i--)//거꾸로 출력
{
wprintf(L"%c", string[i]);
}
return 0;
}
▶해석
숫자값 n을 받아 10으로 나누면서 몇 자릿수인지 체크하며 "십", "백", "천"을 붙이고 n을 10으로 나눈 나머지 값이 0이 아니면 "일", "이", "삼",... 이 들어가므로 구하여 붙인다. 만의 자릿수나 억이 넘어가면 한 번만 출력해야 되므로 한번 출력하는 즉시 "만" -> ""으로 복사하였다. 마지막으로 출력할 때는 string 문자열을 저장할 때 반대로 저장하였으므로 거꾸로 출력하여 정상적인 값을 출력한다.
728x90
'코드업(codeup) > C' 카테고리의 다른 글
코드업(codeup) 2641 : 숏다리의 계단 오르기 (Small) C언어 (0) | 2021.11.29 |
---|---|
코드업(codeup) 2411 : SNS만들기 (1) C언어 (0) | 2021.11.27 |
코드업(codeup) 1920 : (재귀함수) 2진수 변환 C언어 (0) | 2021.11.20 |
코드업(codeup) 2633 : Lower Bound C언어 (0) | 2021.11.16 |
코드업(codeup) 1173 : 30분전 C언어 (0) | 2021.11.16 |
댓글