문제
16진수 수를 입력받아서 10진수로 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 16진수 수가 주어진다. 이 수의 최대 길이는 6글자이다. 16진수 수는 0~9와 A~F로 이루어져 있고, A~F는 10~15를 뜻한다. 또, 이 수는 음이 아닌 정수이다.
출력
첫째 줄에 입력으로 주어진 16진수 수를 10진수로 변환해 출력한다.
풀이 과정
16진수 수를 10진수로 변환하는 방식을 사용하여 풀이한다. 우리가 일상생활에서 사용하는 10진수는 (뒤에서 1번째 자리) x 1 + (뒤에서 2번째 자리) x 10 + (뒤에서 3번째 자리) x 100 + (뒤에서 4번째 자리) x 1000 ... 인 것처럼, 16진수는 (뒤에서 1번째 자리) x 1 + (뒤에서 2번째 자리) x 16 + (뒤에서 3번째 자리) x 16^2 + (뒤에서 4번째 자리) x 16^3 ... 이다.
C
#include <stdio.h>
#include <string.h>
int main(void) {
char num[10];
scanf("%s", num);
int result = 0;
for (int i = 0; i < strlen(num); i++) {
result *= 16;
if ('A' <= num[i] && num[i] <= 'F') result += num[i] - 'A' + 10;
else result += num[i] - '0';
}
printf("%d", result);
return 0;
}
16진수 수를 10진수 수로 변환하는 방식을 이용하여 출력하거나,
#include <stdio.h>
#include <string.h>
int hexa(char num[10], int now) {
if (now == 1) {
if ('A' <= num[0] && num[0] <= 'F') return num[0] - 'A' + 10;
else return num[0] - '0';
}
else {
if ('A' <= num[now - 1] && num[now - 1] <= 'F') return hexa(num, now - 1) * 16 + num[now - 1] - 'A' + 10;
else return hexa(num, now - 1) * 16 + num[now - 1] - '0';
}
}
int main(void) {
char num[10];
scanf("%s", num);
printf("%d", hexa(num, strlen(num)));
return 0;
}
이 변환 과정을 재귀 함수로 작성하여 출력하거나,
#include <stdio.h>
int main(void) {
int a;
scanf("%X",&a);
printf("%d",a);
return 0;
}
처음부터 16진수 서식문자로 입력받아서 10진수 수로 출력할 수 있다.
Python
print(int(input(), 16))
'-- 예전 기록 > BOJ' 카테고리의 다른 글
[ BOJ ] 2167 : 2차원 배열의 합 ( SILVER 5 ) / C (0) | 2023.11.11 |
---|---|
[ BOJ ] 8958 : OX퀴즈 ( BRONZE 2 ) / C (0) | 2023.11.11 |
[ BOJ ] 2903 : 중앙 이동 알고리즘 ( BRONZE 3 ) / C, Python (0) | 2023.11.10 |
[ BOJ ] 10179 : 쿠폰 ( BRONZE 3 ) / C, Python (0) | 2023.11.09 |
[ BOJ ] 10988 : 팰린드롬인지 확인하기 ( BRONZE 2 ) / C, Python (0) | 2023.11.09 |