파이썬 진수변환(2진법, 3진법, 5진법, 10진법)[n진법]

Code_Angler·2021년 5월 12일
8

code study by PyCharm

목록 보기
8/16

Pyhton 진법 변환

n진수 → 10진수

* 결과값은 모두 string 입니다.

python에서는 기본적으로 int() 라는 함수를 지원한다

int(string, base)

위와 같은 형식으로 사용. base에는 진법을 넣으면 된다.

print(int('101',2))
print(int('202',3))
print(int('303',4))
print(int('404',5))
print(int('505',6))
print(int('ACF',16))

20
51
104
185
2767

10진수로 변경이 가능하다.

10진수 → 2, 8, 16진수

2, 8, 16진수는 bin(), oct(), hex() 함수를 지원한다.

print(bin(11))
print(oct(11))
print(hex(11))

0b1011
0o13
0xb

0b는 2진수, 0o는 8진수, 0x는 16진수를 의미합니다. 진법 표시를 지울려면 [2:]를 하면 된다.

print(bin(11)[2:])
print(oct(11)[2:])
print(hex(11)[2:])

1011
13
b


10진수 → n진수

int 같은 함수가 없기 때문에 코드작성이 필요하다

def solution(n, q):
    rev_base = ''

    while n > 0:
        n, mod = divmod(n, q)
        rev_base += str(mod)

    return rev_base[::-1] 
    # 역순인 진수를 뒤집어 줘야 원래 변환 하고자하는 base가 출력
    
print(solution(45, 3))

1200


n진수 → n진수

위에 썻던것들을 활용해서 n진수를 10진수로 변경하고 다시 n진수로 변경하면 됩니다.

print(solution(int('c',16),4)) # 16진수인 C를 4진수로 바꾸는것
print(solution(int('4',6),3))  # 6진수인 4를 3진수로 바꾸는것
print(solution(int('21',3),7)) # 3진수인 21을 7진수로 바꾸는것
print(solution(int('15',9),5)) # 9진수인 15를 5진수로 바꾸는것

30
11
10
24

잠시 보고가는 나의 복잡한 정답식(feat, divmod를 몰라서 발생) (programmers 3진법 뒤집기)

def solution(n):
    rev_thr = []
    for i in range(1, 100):
        if (3 ** i) < n:
            a = (n // (3 ** (i-1)))
            thr = a % 3
            rev_thr.append(thr)
            if a < 9:
                rev_thr.append(a // (3))
    print(rev_thr)

    tenth = 0
    z = 1
    for j in rev_thr:
        number = ((3 ** (len(rev_thr)-z) * j))
        z += 1
        tenth += number
    print(tenth)

solution(45) # result 7 ,rev_thr = [0,0,2,1]
solution(125) # result 229, rev_thr = [2,2,1,1,1]

N진수 정리 끝!!!!

profile
CodeAngler

1개의 댓글

comment-user-thumbnail
2023년 3월 13일

감사합니다~~

답글 달기