C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[50556] 질문이요.
진수변환 [] 1099 읽음    2007-09-13 17:53
#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: 부분에 넣어줘야할텐데....
도움좀 주세요
소스도 엉망진창이여서 잘보실수 있으시련지.

+ -

관련 글 리스트
50556 질문이요. 진수변환 1099 2007/09/13
50560     Re:질문이요. 장성호 1441 2007/09/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.