문제 링크: https://www.acmicpc.net/problem/1550

 

16진수(hexadecimal)를 입력받아 10진수(decimal)로 출력하는 문제입니다.

scanf("%x", &n)을 사용하면 쉽습니다. x가 hexadecimal value를 입력하는 format입니다.

 

아니면 직접 변환해주면 되는데요, 진법 변환은 어렵지 않습니다. 전개하는 방법만 기억해두면 됩니다.

\[ABC_{(16)}=10 \times 16^2 + 11 \times 16^1 + 12 \times 16^0 \]

예를 들어 \(ABC_{(16)}\)을 10진수로 나타내면 위와 같습니다. 16진수의 A~F는 10진수의 10~15를 나타내는 점 기억해주세요.

 

// 1550

#pragma GCC optimize ("Ofast")

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;



int hex_digit_to_dec(char a) {
	if (a >= '0' && a <= '9')
		return a - '0';
	else
		return a - 'A' + 10;
}

int mypow(int base, int exp) {
	if (exp == 0) return 1;

	int ret = 1;
	for (int i = 0; i < exp; ++i) {
		ret *= base;
	}
	return ret;
}

int main()
{
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
#endif
	
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	
	string s;
	cin >> s;

	int sum = 0;
	int pos = 0;
	for (auto it = s.rbegin(); it != s.rend(); ++it) {
		sum += hex_digit_to_dec(*it) * mypow(16, pos);
		++pos;
	}

	cout << sum << '\n';

	return 0;
}
반응형