본문 바로가기

Programming/[자료구조, 알고리즘]

[Python]기수 변환하기(n진수 구하기)

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진수의 개념도 함께 공부할 수 있었습니다.

 

반응형