1. 목적: 16진수를 입력 받아서 10진수로 출력한다.
2. 해결책:
0. 보통 16진수를 10진수로 변환할 떄 16^n x (nth coefficient) + 16^(n - 1) x (n - 1th coefficient) ... + 16^0 x first coefficient) 식으로 계산한다. 참고로 first coefficient는 1자리의 수이다.
1. 한 변수는 입력 받을 16진수를 string 값으로 저장한다
2. 반복문을 16진수의 길이 값만큼 각 숫자를 내림차 순으로 (거꾸로, 1자리 수 부터) 읽고 string 값을 구한다.
a. 만약 0~9 숫자면 캐릭터 '0'에서 빼면 정수 값이 나온다.
b. 만약 숫자가 아닌 알파벳 캐릭터이면 (16진수는 A = 10, B = 11, C = 12, ... ) A 만큼 더하면 10진수 값이 나오니 그 수를 반환한다.
3. 기억해야 할 점** 16만 계속 곱하는게 아니라 변수가 처음에는 16으로 변하고, 다음 계산마다 16씩이나 곱해진다는 점을 까먹지 말자.
3. 소스코드:
C++
#include <iostream>
#include <string>
using namespace std;
int main(){
string input;
int sum = 0, temp = 1;
cin >> input;
for (int i = input.length() - 1; i >= 0; i--){
if(input[i] >= '0' && input[i] <= '9')
sum += (input[i] - '0') * temp;
else
sum += (input[i] - 'A' + 10) * temp;
temp *= 16;
}
cout << sum;
return 0;
}
'백준 오답노트 (BOJ) 🚩 > 브론즈 (Bronze) 🥉' 카테고리의 다른 글
< BOJ - Bronze V > 2475 : 검증수 (0) | 2022.04.03 |
---|---|
< BOJ - Bronze V > 2338 : 긴자리 계산 (0) | 2021.12.10 |
< BOJ - Bronze V > 1550 : 16진수 (0) | 2021.12.08 |
< BOJ - Bronze V > 1271 (0) | 2021.12.07 |