본문 바로가기
Algorithm/BackJoon

1550번: 16진수

by 꼬부기가우는소리 2023. 9. 13.
728x90

 

- 문제 사이트: https://www.acmicpc.net/problem/1550

 

1550번: 16진수

첫째 줄에 16진수 수가 주어진다. 이 수의 최대 길이는 6글자이다. 16진수 수는 0~9와 A~F로 이루어져 있고, A~F는 10~15를 뜻한다. 또, 이 수는 음이 아닌 정수이다.

www.acmicpc.net

 

입력 받은 16진수를 10진수로 변환해주는 문제이다.

끝 문자부터 10진수로 변환 후 더하여 계산하였다.

 

1) 끝에서부터 한 문자씩 확인

2) 문자를 숫자로 변환: hex[i] - '0'

3) 확인하는 문자 (hex[i]) 가 숫자가 아닌 경우, 변환된 숫자에서 7을 더 빼줌 ('A' - '0' = 17 → 'A' - '0' - 7 = 10)

4) 현재 자리수 (16^digit) 값을 곱하여 10진수로 변환

 

#include <iostream>
#include <map>
#include <cmath>
using namespace std;

int hexToDec(string hex)
{
    int dec = 0;
    int digit = 0;
    for (int i = hex.length() - 1; i >= 0; i--)
    {
        int num = hex[i] - '0';
        if (!isdigit(hex[i]))
            num -= 7;
            
        dec += (num * pow(16, digit));
        digit++;
    }
    return dec;
}

int main()
{
    string hex;
    cin >> hex;
    cout << hexToDec(hex);
    return 0;
}

- 메모리: 2208 KB

- 시간: 0 ms

- 코드 길이: 456 B

 

직접 변환하는 것이 아닌, 서식 문자를 이용하여 훨씬 간단하게 계산해줄 수도 있다.

 

1) 부호 없는 16진수 정수 타입으로 입력 받음: %x or %X

2) 부호 있는 10진수 정수 타입으로 출력: %d

 

#include <cstdio>
int main()
{
    int x;
    scanf("%x", &x);
    printf("%d", x);
    return 0;
}

- 메모리: 1112 KB

- 시간: 0 ms

- 코드 길이: 99 B

 

* 연관 문제:

- [백준] 1212번: 8진수 2진수

- [백준] 1373번: 2진수 8진수

'Algorithm > BackJoon' 카테고리의 다른 글

15873번: 공백 없는 A+B  (0) 2023.09.15
11943번: 파일 옮기기  (0) 2023.09.14
4779번: 칸토어 집합  (0) 2023.09.12
25192번: 인사성 밝은 곰곰이  (0) 2023.09.11
1158번: 요세푸스 문제  (0) 2023.09.10

댓글