이번 과제는 월급을 받아 몇년치의 연봉을 측정하는 과제이다
연봉을 한글로 번역해서 표현했다
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char one[4]="일";char two[4]="이";char three[4]="삼";char four[4]="사";
char five[4]="오";char six[4]="육";char seven[4]="칠";char eight[4]="팔";char nine[4]="구";
char Eighteen[7]="백"; char Seventeen[7]="십"; char Sixteen[7]="경";char Fifteen[7]="천";
char Fourteen[7]="백";char Thirteen[7]="십";char Twelve[4]="조";char Eleven[7]="천"; char Ten[7]="백";char Nine[7]="십";
char Eight[7]="억";char Seven[7]="천";char Six[7]="백";char Five[7]="십";char Four[4]="만"; char Three[4]="천";
char Two[4]="백";char One[4]="십";
long long calculSalary(long long salary){
long long year;
printf("일한 년수를 입력해주세요 :");
scanf("%lld",&year);
return salary*year*12;
}
long long power(int x,int n){
if(n==0){
return 1;
}
if(n==1){
return x;
}
long long tmp = power(x,n/2);
if(n%2==1){
return tmp*tmp*x;
}
return tmp*tmp;
}
void changeCharacter(long long result,char* test[]){
sprintf(test,"%lld",result);
}
void printKorean(char* test){
long long calcul=0;
int kyungFlag=0;
int joFlag=0;
int eokFlag=0;
int manFlag=0;
char result[500]="";
for(int i=0;i<test[i];i++){
char tmp[20]="";
strcpy(tmp,&test[i]);
calcul =atoll(tmp)/power(10,strlen(test)-i-1);
if(atoll(tmp)>=power(10,16)&&atoll(tmp)<power(10,20)){
kyungFlag=1;
}
if(atoll(tmp)>=power(10,12)&&atoll(tmp)<power(10,16)){
joFlag=1;
}
if(atoll(tmp)>=power(10,8)&&atoll(tmp)<power(10,12)){
eokFlag=1;
}
if(atoll(tmp)>=power(10,4)&&atoll(tmp)<power(10,8)){
manFlag=1;
}
switch (calcul)
{
case 1:
if(strlen(test)-i==1){
strcat(result,one);
}
break;
case 2:
strcat(result,two);
break;
case 3:
strcat(result,three);
break;
case 4:
strcat(result,four);
break;
case 5:
strcat(result,five);
break;
case 6:
strcat(result,six);
break;
case 7:
strcat(result,seven);
break;
case 8:
strcat(result,eight);
break;
case 9:
strcat(result,nine);
break;
}
switch (strlen(test)-i)
{
case 19:
if(test[i]!='0'){
strcat(result,Eighteen);
}
case 18:
if(test[i]!='0'&&strlen(test)-i==18){
strcat(result,Seventeen);
}
break;
case 17:
if(kyungFlag==1){
strcat(result,Sixteen);
}
break;
case 16:
if(test[i]!='0'){
strcat(result,Fifteen);
}
break;
case 15:
if(test[i]!='0'){
strcat(result,Fourteen);
}
break;
case 14:
if(test[i]!='0'){
strcat(result,Thirteen);
}
break;
case 13:
if(joFlag==1){
strcat(result,Twelve);
}
break;
case 12:
if(test[i]!='0'){
strcat(result,Eleven);
}
break;
case 11:
if(test[i]!='0'){
strcat(result,Ten);
}
break;
case 10:
if(test[i]!='0'){
strcat(result,Nine);
}
break;
case 9:
if(eokFlag==1){
strcat(result,Eight);
}
break;
case 8:
if(test[i]!='0'){
strcat(result,Seven);
}
break;
case 7:
if(test[i]!='0'){
strcat(result,Six);
}
break;
case 6:
if(test[i]!='0'){
strcat(result,Five);
}
break;
case 5:
if(manFlag==1){
strcat(result,Four);
}
break;
case 4:
if(test[i]!='0'){
strcat(result,Three);
}
break;
case 3:
if(test[i]!='0'){
strcat(result,Two);
}
break;
case 2:
if(test[i]!='0'){
strcat(result,One);
}
break;
case 1:
break;
}
}
printf("%s원\n",result);
}
void print(long long *salary){
printf("월급을 입력하세요 : ");
scanf("%lld",salary);
}
int main(void){
long long salary;
print(&salary);
long long res = calculSalary(salary);
char* test[200];
changeCharacter(res,test);
printKorean(test);
printf("%s",test);
}
몇년치의 연봉을 문자열로 sprintf를 사용해서 바꾼 뒤 앞에서부터 한글자씩 자르며 5천(억) 이런 식으로 번역했다
결과
