출력할 진법 선택 -> 8, 10, 16진수로 입력하면 출력 진법에 맞게 출력

8진수는 0표기법, 16진수는 0x표기법 사용


#include <stdio.h>

#include <string.h>

#include <stdlib.h>


#define MAX 100


int ten(char[], int);

int eight(char[], int);

int sixteen(char[], int);

int jinsu(char str[]);


int main(void)

{

int i, final;

char str[MAX] = {0,};


while(1)

{

printf("\n1.8진수2.10진수3.16진수4. 종료:____");

scanf("%d",&i);

switch(i

{

case 1:

printf("\n정수를표현하는문자열을입력: ");

scanf("%s",&str);

final = jinsu(str);

printf("%s는8진수로%o 입니다. \n", str, final);

break;

case 2:

printf("\n정수를표현하는문자열을입력: ");

scanf("%s",&str);

final = jinsu(str);

printf("%s는10진수로%d 입니다. \n", str, final);

break;

case 3:

printf("\n정수를표현하는문자열을입력: ");

scanf("%s",&str);

final = jinsu(str);

printf("%s는16진수로%x 입니다. \n", str, final);

break;

case 4:

printf("\n프로그램을종료합니다. \n");

exit(0);

break;

default:

printf("메뉴에없음!! \n");

break;

}

}

return 0;

}


int jinsu(char str[])

{

int jinsu = 0, temp=0;


if(str[0] != '0'

{

jinsu =10;

temp = ten(str, jinsu);

}

else 

{

if(str[1] == 'x' || str[1] == 'X'

{

jinsu = 16;

temp = sixteen(str, jinsu);

}


else 

jinsu = 8;

temp = eight(str, jinsu);

}

}

return temp;

}


int ten(char str[], int jinsu)

{

int i=0, len=0, num=0;

int result[MAX] = {0,};

len = strlen(str);

for(i=0 ; i < len ; i++) 

{

if(str[0] >'0' && str[i] <'9'

{

result[i] = str[i] - '0';

num = num * jinsu + result[i];

}

}

return num;

}


int eight(char str[], int jinsu)

{

int i=0, len=0, num=0;

int result[MAX] = {0,};

len = strlen(str);

for(i=1 ; i < len ; i++) 

{

if(str[1] >'0' && str[i] <'8')

{

result[i] = str[i] - '0';

num = num * jinsu + result[i];

}

}

return num;

}


int sixteen(char str[], int jinsu)

{

int i=0, len=0, num=0;

int result[MAX] = {0,};

len = strlen(str);

for(i=2 ; i < len ; i++) 

{

if(str[2]>'0' && str[i]<'10')

{

if(str[i]>='a' && str[i]<='f')

result[i] = str[i]-'a'+10;

else

result[i] = str[i] - '0';

num = num * jinsu + result[i];

}

}

return num;

}