ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 16,2,8진수에서 10진수 변환,10진수에서 16,2,8진수(진수 변환)
    프로그래머스문제정리 & Python잡다한것 2020. 9. 14. 11:20
    728x90
    반응형

    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')

     

     

     

     

    반응형
Designed by Tistory.