티스토리 뷰

파이썬에서 주어지는 내장 함수를 사용하지 않고

직접 10진수 -> n진수, n진수 -> 10진수로 변환하는 코드를 작성하겠습니다.

 

10진수 -> N진수 변환

n_dic1 = {
    0: '0', 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', 8: '8', 9: '9', 10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F'
}

def change_10_to_n(n, value):
    result = ''
    q, r = divmod(n, value)
    while q > 0:
        result += n_dic1[r]
        q, r = divmod(q, value)

    result += n_dic1[r]

    return result[::-1]

n이 10진수 값이고, value는 바꾸려는 진수 값입니다.

딕셔너리를 선언하지 않고 나머지를 문자열에 추가하게 되면 10진수 이상으로는 변환할 수 없기 때문에 다음과 같이 선언하였습니다.

 

 

N진수 -> 10진수 변환

n_dic2 = {
    '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, 'A': 10, 'B': 11, 'C': 12, 'D': 13, 'E': 14, 'F': 15
}

def change_n_to_10(s, value):
    result = 0
    s = s[::-1]
    for i in range(len(s)):
        result += n_dic2[s[i]] * (value ** i)

    return result

이번엔 문자열의 형태로 N진수의 값을 s로 받고, value는 s의 진수 값입니다.

아까 딕셔너리와 반대로 이 딕셔너리는 key값이 문자열, value값이 정수입니다.

 

 

10진수 -> N진수 변환 (간단)

내장 함수를 사용한다면 다음과 같이 변경할 수 있습니다.

bin(42) 
# '0b101010' 
oct(42) 
# '0o52' 
hex(42) 
# '0x2a'

 

N진수 -> 10진수 변환 (간단)

int('1011', base=2) # 11

그냥 문자열 값을 앞에 두고, base 값을 지정해주면 10진수로 잘 변환이 됩니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함