#include <stdio.h>

#include <stdlib.h>


typedef struct

{

        int num;

        int meth;

//      char answer;

}Info;


void SetInfo(Info *Ent);

void transducer(int num, int meth);

void check_meth(Info *Ent);

void binary(int num);

void oct(int num);

void hex(int num);

char hex_helper(int num);



void main()

{

        Info Ent;

        SetInfo(&Ent);

        transducer(Ent.num, Ent.meth);

}


void SetInfo(Info *Ent)

{

        printf("=== decimal transducer ===\n\n");

        printf("Input decimal : ");

        scanf("%d", &Ent->num);

        printf("Method (1. Binary 2. Octal 3. hex) : ");

        scanf("%d", &Ent->meth);

        check_meth(Ent);

        printf("\n\n");

}


void check_meth(Info *Ent)

{

        if(!(Ent->meth > 0 && Ent->meth < 4))

        {

                system("clear");

                SetInfo(Ent);

        }

}


void transducer(int num, int meth)

{

        switch(meth)

        {

        case 1:

        {

                binary(num);

                break;

        }

        case 2:

        {

                oct(num);

                break;

        }

        case 3:

        {

                hex(num);

                break;

        }

        }

}


void binary(int num)

{

        int count = 0, rest = num;

        int Save[20] = {0};


        for(count = 0; rest > 0;count++)

        {

                if(rest == 1)

                {

                        Save[count] = rest;

                        break;

                }


                Save[count] = rest%2;

                rest = rest/2;

        }


        printf("Binary Result %d -> ", num);


        for(count; count > -1; --count)

                printf("%d", Save[count]);


        printf("\n");

}


void oct(int num)

{

        int count = 0, rest = num;

        int Save[20] = {0};


        for(count = 0; rest > 0; count++)

        {

                if(rest < 8)

                {

                        Save[count] = rest;

                        break;

                }


                Save[count] = rest%8;

                rest = rest/8;

        }


        printf("Oct Result %d -> ", num);


        for(count; count > -1; --count)

                printf("%d", Save[count]);


        printf("\n");

}


void hex(int num)

{

        int count = 0, rest = num;

        char Save[20];


        for(count = 0; rest > 0; count++)

        {

                if(rest < 16)

                {

                        Save[count] = hex_helper(rest);

                        break;

                }


                Save[count] = hex_helper(rest);

                rest = rest/16;

        }


        printf("Hex Result %d -> ", num);


        for(count; count > -1; --count)

                printf("%c", Save[count]);


        printf("\n");

}


char hex_helper(int num)

{

        switch(num)

        {

        case 0:

                return '0';

        case 1:

                return '1';

        case 2:

                return '2';

        case 3:

                return '3';

        case 4:

                return '4';

        case 5:

                return '5';

        case 6:

                return '6';

        case 7:

                return '7';

        case 8:

                return '8';

        case 9:

                return '9';

        case 10:

                return 'A';

        case 11:

                return 'B';

        case 12:

                return 'C';

        case 13:

                return 'D';

        case 14:

                return 'E';

        case 15:

                return 'F';

        }


}



=======================================
10진수 형변환 

프로그래밍 공부한지 별로 안됬는데...

이렇게 짜는거 맞나요? 자료구조.. ??? 그거 읽어보는게 좋겠죠 ?