C·C++

16진수를 10진수로 변환하기 + 10진수를 16진수로 변환하기 (C,C++)

16진수를 10진수로 변환하기 + 10진수를 16진수로 변환하기 (C,C++) 대표 이미지
/*16진수 를 10진수로 변환하는 프로그렘*/

#include <stdio.h>
#include <math.h>
#include <windows.h>

int main(){
   
    char c[8];
    //4byte int변수의 최대 표현 범위는 2^31-1이므로 8자리 (16^8-1) 이상으로 필요하지 않다.
    int i,sum=0,d;
    // 최대 8자리의 16진수를 입력하되 만약 8자리의 16진수는 7까지만 입력가능.
   
    printf("자릿수를 입력(최대 8 자리) : ");
    scanf("%d",&d);
   
    printf("%d자리 16진수 입력(최대 7FFFFFFF) : ",d);
   
    scanf("%s",c);
    for(i=0;i<d;i++){
                     if('A'<=c[i]&&c[i]<='F')c[i]+=10-'A';
                     else c[i]-='0';
                     sum+=c[i]*pow(16,d-1-i);
    }
   
    printf("10진수 변환:  %d\n",sum);
   
    system("PAUSE");
    return 0;
   
}
   
   
/*10진수 를 16진수로 변환하는 프로그렘*/

#include <stdio.h>
#include <windows.h>

int main(){
   
    char c[8];//8자리 이상 필요 없다.
    //0~2^31-1까지 입력
    //int는 4바이트지만 음수를 표현해야 하므로 31비트 까지만 양수로 표현 가능;
    int i,d=0,z;
   
    scanf("%d",&z);
   
   
    while(z!=0){
                   c[d]=z%16;
                   z/=16;
                   if(10<=c[d])c[d]+='A'-10;
                   else c[d]+='0';
                   d++;
    }
    if(d==0)printf("0");
   
    for(i=d-1;i>=0;i--){
                        printf("%c",c[i]);
    }
   
    printf("\n");
    system("PAUSE");
    return 0;
}

math.h 안쓸려면 pow 대신 반복문 쓰고
사실 입력을 본문처럼 구체적으로 받아줄 필요도 없다.
하지만 int 변수 에 담을려면 이렇게 해야 한다.
그런데 2^32을 전부 표현하는 게 불가능 하지많은 않다.
sum 변수에 값을  -2^31로 초기화 해주고 출력할때 2^31을 더해주면 된다.


아니면 int변수 전부를 활용하기위해 16진수를 -80000000부터 7FFFFFFF까지 받게끔 코드를 만들어 줘도 된다.

다음과 같다.


/*16진수 를 10진수로 변환하는 프로그렘*/

#include <stdio.h>
#include <math.h>
#include <windows.h>

int main(){
   
    char c[8];
    //4byte int변수의 최대 표현 범위는 2^31-1이므로 8자리 (16^8-1) 이상으로 필요하지 않다.
    int i,sum=0,d,flag=0;
    // 최대 8자리의 16진수를 입력하되 만약 8자리의 16진수는 7까지만 입력가능.
   
    printf("자릿수를 입력(최대 8 자리) : ");
    scanf("%d",&d);
   
    printf("%d자리 16진수 입력(7FFFFFFF~80000000) : ",d);
   
    scanf("%s",c);
   
    if(c[0]=='-')flag=1;
   
   
    for(i=flag;i<d+flag;i++){
                    if('A'<=c[i]&&c[i]<='F')c[i]+=10-'A';
                    else c[i]-='0';
                   
                    sum+=c[i]*(1-2*flag)*pow(16,d+flag-1-i);//음수일때 빼주고 양수일때 더한다.
    }
   
    printf("10진수 변환:  %d\n",sum);
   
    system("PAUSE");
    return 0;
   
}


실행결과

자릿수를 입력(최대 8 자리) : 7
7자리 16진수 입력(7FFFFFFF~80000000) : 3F9K923
10진수 변환:  66763043
Press any key to continue . . .

자릿수를 입력(최대 8 자리) : 5
5자리 16진수 입력(7FFFFFFF~80000000) : -1FFF8
10진수 변환:  -131064
Press any key to continue . . .

댓글