개요
Python으로 진수 변환하는 방법에 대해서는 2022.06.08 - [BOJ] 2998 - 8진수에서 살펴보았었는데, 10진수를 2, 8, 16 진수 외의 다른 진수의 수로 변환할 때는 직접 변환 함수를 구현해야 한다.
이 글에서 구현해보려고 한다.
진수 변환 방법
수학적으로 진수를 변환하는 방법은 다음과 같다.
1. 어떤 수를 진수로 나눠 몫과 나머지를 구한다.
2. 몫이 나누어지지 않을 때까지 연산을 반복한다.
3. 나머지를 역순으로 읽는다.
이 과정을 Python 코드로 구현한다.
코드 구현 - 재귀함수
진수 변환은 재귀함수를 이용해 간단히 구현할 수 있다.
1. 자릿값을 초기화한다.
tmp = string.digits + string.ascii_uppercase
2. 숫자를 나눈 몫과 나머지를 구한다.
q, r = divmod(num, base)
3. 몫이 0이면 나머지를 반환하고, 그렇지 않으면 재귀함수로 함수를 재호출 한다.
재귀함수 사용 시 나머지가 역순으로 정렬될 수 있게끔 주의해야 한다.
def num_base_convert(num, base):
tmp = string.digits + string.ascii_uppercase
q, r = divmod(num, base)
return tmp[r] if q == 0 else num_base_convert(q, base) + tmp[r]
실행 결과
코드 구현 - 반복문
반복문을 이용해 구현해도 된다.
def num_base_convert(num, base):
tmp = string.digits + string.ascii_uppercase
result = ''
while num // base > 0:
num, r = divmod(num, base)
result = tmp[r] + result
return tmp[num] + result
참고 문서
https://blog.hexabrain.net/357