[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. 생각

  1. 이 문제는 11005번 진법변환2의 반대로 변환하는 문제입니다. 즉, B진법으로 표현된 수를 10진법으로 변환하는 문제입니다.
  2. string으로 입력 받고 0-9까지의 숫자는 사실 char형이므로 각 숫자에 해당하는 아스키코드의 값을 가지고 있습니다. 따라서 0의 아스키코드 값인 48을 빼줍니다.

  3. 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++)


터미널의 입출력 화면 예제1

2745_1

터미널의 입출력 화면 다른 예제

2745_2 2745_3