|
#include <stdio.h>
/* 진법을 변환 하는 함수 */
void jinbup(unsigned long a,unsigned long b);
void main(void)
{
unsigned long divisor=0; /* 제 수 */
unsigned long dividend=0; /* 피제수 */
char digit[256]={""}; /* 값을 입력 받는 배열 */
int i=0;
int k=0; /*10진수 변환 데이터 저장 */
while(1)
{
printf("\n몇 진법의 수 입니까?(2 ~ 16) : ");
scanf("%lu",&divisor);
if (divisor < 2 || divisor > 16) /* 2,8,10,16 진수 */
{
printf("\n에러 : 2이상 16이하만 입력하세요...\n");
}
else
{
printf("2진수={0,1}, 8진수={0~7}, 10진수={0~9}, 16진수={0~9,a~f}\n");
printf("수를 입력하세요 : ");
scanf("%s",digit); /*수를 배열로 받습니다. */
}
break;
}
switch(divisor) {
case 2:
while(digit[i]=='1' || digit[i]=='0') { /* 2진수 -> 10진수 */
k<<=1;
k+=(digit[i]-'0');
i++;
}
dividend=k;
jinbup(8, dividend);
jinbup(10, dividend);
jinbup(16, dividend);
break;
case 8:
while(digit[i]>='0' && digit[i]<='8') { /* 8진수 - > 10진수 */
k<<=3;
k+=(digit[i]-'0');
i++;
}
dividend=k;
jinbup(2, dividend);
jinbup(10, dividend);
jinbup(16, dividend);
break;
case 10:
jinbup(2, dividend);
jinbup(8, dividend);
jinbup(16, dividend);
break;
case 16:
jinbup(2, dividend);
jinbup(8, dividend);
jinbup(10, dividend);
break;
}
}
/* 진법 변환 실행 */
/* 계속 나누면서 나머지만을 모았다가 거꾸로 출력하는 방법 */
void jinbup(unsigned long a,unsigned long b) {
unsigned long remainder=0; /* 나머지 */
int i=0; /* for문에서 사용될 카운터용 변수 */
int cipher=0; /* 자리수, for문에서 사용 */
char digit[256]={0}; /* 진법의 출력값(역순으로 저장될 곳) */
for(cipher=0; b>=a; cipher++)
{
remainder=b%a;
b/=a;
if (remainder < 10) digit[cipher]=(char)('0'+remainder);
else digit[cipher]=(char)('a'+(remainder-10));
}
remainder=b%a;
if(remainder<10) digit[cipher++]=(char)('0'+remainder);
else digit[cipher++]=(char)('a'+(remainder-10));
digit[cipher]='\0';
printf("\n%lu진법의 수는 ",a);
/* 저장된 문자열을 거꾸로 출력합니다. */
for(i=cipher-1;i >= 0;i--) putchar(digit[i]);
printf("입니다.\n\n\n");
}
제가 지금 진수 변환하는 소스를 짜고있는데...
16진수->10진수 로 변환하는걸 어떻게해야할지 막막합니다.ㅠㅠ
case 16: 부분에 넣어줘야할텐데....
도움좀 주세요
소스도 엉망진창이여서 잘보실수 있으시련지.
|