Python 16,2,8진수에서 10진수 변환,10진수에서 16,2,8진수(진수 변환)
1. 내가 생각한 코드
무식한 방법이지만 단순히 변환하는 알고리즘을 짜야하는 줄 알고 스스로 코드를 작성해 보았다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import sys
sixt_num = sys.stdin.readline()
result = 0
index = len(sixt_num)-2
for i in range(0,len(sixt_num)-1):
if sixt_num[i] =='A':
result += 10*(16**index)
elif sixt_num[i] =='B':
result += 11*(16**index)
elif sixt_num[i] =='C':
result += 12*(16**index)
elif sixt_num[i] =='D':
result += 13*(16**index)
elif sixt_num[i] =='E':
result += 14*(16**index)
elif sixt_num[i] =='F':
result += 15*(16**index)
else :
result += int(sixt_num[i])*(16**index)
index -= 1
print(result)
|
cs |
내가 생각해도 너무 지저분한 코드인 것 같았다. 또한 코드 실행시간도 너무 오래걸렸다. 백준 기준으로 64ms인데, 이는 너무 긴 시간이다.
그래서 Python에서는 어떤 식으로 변환하는 지 찾아 보았다.
2. 더 간결한 코드 16, 2, 8 진수에서 10 진수로 변경하기
1
2
3
4
5
6
7
|
import sys
num = sys.stdin.readline().rstrip()
print(int(num,16))
print(int(num,2))
print(int(num,8))
|
cs |
각각 num에 해당하는 진수의 값을 넣으면 빠르게 10진수로 변환 되는 것을 알 수 있다.
ex)
a = '0b1010'
b = '0o10'
c = '0x3f6'
같이 표기된 진수 표현을 10진수로 바꾸는 방법
3. 반대로 10진수를 16, 2, 8진수로 변경하기
1
2
3
4
5
6
7
8
9
|
import sys
num = int(sys.stdin.readline())
binary = bin(num)
octal = oct(num)
hexadecimal = hex(num)
print(binary)
print(octal)
print(hexadecimal)
|
cs |
4. 8진수 입력을 2진수로 출력하기
우선 그냥 입력에서는 str 객체이기 때문에 '0o' 를 붙혀준다. (16진수 : 0x, 2진수 : 0b)
그 후, 2가지 방법으로 2진수 출력을 할 수 있다.
1. bin()함수 : 0b까지 전부 나옴
2. format() : 0b를 제외한 부분 나옴(b 앞에 #을 붙히면 bin()과 동일하게 나옴)
5. 정리
1. 10진수를 2, 8, 16진수로 변환하기 : 10진수가 num이라고 했을때 각각 bin(num), oct(num), hex(num(
2. 10진수를 2, 8, 17진수로 format()사용 :
2-1)format(num,'b'), format(num,'o'),format(num,'x')
2-2)format(num,'#b'),format(num,'#o'),format(num,'#x')
3. 2, 16, 8 진수를 10진수로 : int(num, 2), int(num, 8), int(num, 16)
(입력 num(str) -> 2진수 : '101010', 8진수 : '314' , 16진수 : '30')