/*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 . . .
#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 . . .
댓글
댓글 쓰기