[BOJ][C++] 백준 2745번 진법변환
Updated:
2745번 진법변환
1. 문제 정보
백준 온라인 저지 [2745번 진법변환] 문제의 링크입니다.
문제
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, …, F: 15, …, Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)
B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.
출력
첫째 줄에 B진법 수 N을 10진법으로 출력한다.
예제 입력1
ZZZZZ 36
예제 출력1
60466175
시간 / 메모리 제한
1초 / 128MB
2. 생각
- 이 문제는 11005번 진법변환2의 반대로 변환하는 문제입니다. 즉, B진법으로 표현된 수를 10진법으로 변환하는 문제입니다.
-
string으로 입력 받고 0-9까지의 숫자는 사실 char형이므로 각 숫자에 해당하는 아스키코드의 값을 가지고 있습니다. 따라서 0의 아스키코드 값인 48을 빼줍니다.
- A-Z의 알파벳은 현재 A=65, B=66, …, Z=90의 아스키코드 값을 가지고 있습니다. 이 또한 A=10, B=11, … , Z=35에 해당하는 값으로 바꿔주어야합니다.
+ plus
B진법 수 (B=36) | Z = 35 | Z | Z | Z | Z |
---|---|---|---|---|---|
B^n (36^n) | 36^4 = 1679616 | 36^3 = 46656 | 36^2 = 1296 | 36^1 = 36 | 36^0 = 1 |
Z * B^n (35 * 36^n) | 58786560 | 1632960 | 45360 | 1296 | 35 |
sum | 60466175 |
3. 소스코드 (C++)