728x90
반응형
정숫값을 임의의 기수(n진법으로 표기되는 숫자)로 변환하는 알고리즘을 살펴보겠습니다.
10진수 정수를 n진수로 변환하려면 정수를 n으로 나눈 나머지를 구하는 동시에 몫을 반복해서 나눠야 합니다. 몫이 0이 될 때까지 이 과정을 반복하고 나열된 나머지를 역순으로 늘어놓으면 기수로 변환한 수가 됩니다.
몫과 나머지를 나열하는 것이 중요합니다!!!!!
이해가 안가실 수 있으니 예시와 함께 살펴보겠습니다.
ex1) 59를 2진수로 변환
계산식 | 몫과 나머지 |
59/2 | 29 1 |
29/2 | 14 1 |
14/2 | 7 0 |
7/2 | 3 1 |
3/2 | 1 1 |
1/2 | 0 1 |
나머지를 맨 밑부터 나열하게 되면 2진수로 변환한 수 가 됩니다.
111011(2) 1+2+8+16+32 = 59 이므로 변환이 잘 된것을 확인할 수 있습니다.
ex2) 59를 8진수로 변환
계산식 | 몫과 나머지 |
59/8 | 7 3 |
7/8 | 0 7 |
위와 같게 변환하면
73(8)이 됩니다.
ex3) 59를 16진수로 변환
계산식 | 몫과 나머지 |
59/16 | 3 B |
3/16 | 0 3 |
※ 여기서 몫에 왜 B가 나왔는지 궁금하실껍니다.
16진수는 0~9까지는 십진수를 같이 사용하고, 10~15까지는 영어 알파벳 대문자를 빌려 A,B,C,D,E,F를 사용합니다. 따라서 나머지가 11이므로 B라고 표기합니다.
다시 돌아와서 변환하게 되면 3B(16)이 됩니다.
위에서 설명한 개념을 코드로 구현하면 다음과 같습니다.
해당 함수에서는 10진수를 2~36진수로 변환하여 출력할 것입니다.
n진수 구하기 함수
#10진수 정숫값을 입력받아 2~36진수로 변환하여 출력하기
def card_conv(x: int, r: int) -> str:
"""정수값 x를 r진수로 변환한 뒤 그 수를 나타내는 문자열을 반환"""
d = '' # 변환 후의 문자열
dchar = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
while x > 0:
d += dchar[x % r] # 해당하는 문자를 꺼내 결합, 나머지를 나열하기 위함
x //= r
return d[::-1] # 역순으로 반환
여기서 x는 10진수의 수 r는 n를 의미합니다.
내용은 여기까지입니다. n진수 구하기라는 알고리즘을 통해 n진수의 개념도 함께 공부할 수 있었습니다.
반응형
'Programming > [자료구조, 알고리즘]' 카테고리의 다른 글
[Python] 큐(Queue) 구현 (0) | 2022.03.15 |
---|---|
[Python] 스택(Stack) 구현 (0) | 2022.03.14 |
[Python] mutable, immutable 간략한 메모 (0) | 2022.01.06 |
[Python] 재귀함수 : 피보나치 수, 팩토리얼 (0) | 2022.01.02 |
[Python]1부터 n까지 정수의 합 구하기 (0) | 2021.12.28 |