728x90
- 문제 사이트: https://www.acmicpc.net/problem/1550
입력 받은 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진수
728x90
'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 |
댓글