메모리: 113112 KB, 시간: 116 ms
수학, 구현, 문자열
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진법으로 출력한다.
if __name__ == '__main__':
N,B = input().split()
print(convert(N,int(B)))
N을 입력받아 B진법으로 변환하는 함수 convert를 제작하여 정답을 출력하도록 설계했다.
def convert(num,b):
answer = 0
alpha_to_num = dict()
for i in range(65,b+55):
alpha_to_num[chr(i)] = i-55
for i in range(len(num)):
try:
answer += int(num[i])*(b**(len(num)-1-i))
except:
answer += alpha_to_num[num[i]]*(b**(len(num)-1-i))
return answer
ASCII CODE
에 따르면 A = 65 이다.
B진법은 ASCII CODE의 B+54 번호의 알파벳까지 있다.
무슨 소리냐 하면, 16진법은 F = 15 까지 있다.
F는 아스키 코드로 70이고 이는 16+54 = 70이다.
따라서, 알파벳을 key, 숫자를 value로 가지는 dictionary를 생성한다.
그리고 N을 한 글자씩 돌면서 B진법으로 변환하여 해당 자리수에 맞는 숫자를 곱한다.
예를 들어, N = 1A5, B = 16이라면
N을 10진법으로 변환한 수는
1x(16^2)+10x(16^1)+5x(16^0) 이다.
def convert(num,b):
answer = 0
alpha_to_num = dict()
for i in range(65,b+55):
alpha_to_num[chr(i)] = i-55
for i in range(len(num)):
try:
answer += int(num[i])*(b**(len(num)-1-i))
except:
answer += alpha_to_num[num[i]]*(b**(len(num)-1-i))
return answer
if __name__ == '__main__':
N,B = input().split()
print(convert(N,int(B)))