과제 도전기 - 3

김치전사·2022년 4월 10일
0

과제 도전기

목록 보기
3/4

이번 과제는 월급을 받아 몇년치의 연봉을 측정하는 과제이다

연봉을 한글로 번역해서 표현했다

#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천(억) 이런 식으로 번역했다

결과

profile
개인공부 블로그입니다. 상업적 용도 X

0개의 댓글