728x90

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) n을 p으로 나눈 몫과 나머지
        rev_base += str(mod)

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

# divmod() : 몫과 나머지를 리턴. 리턴 값이 2개이므로 튜플을 사용.
# int(x, base) : base 진법으로 구성된 str 형식의 수를 10진법으로 변환해 줌

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

728x90

+ Recent posts