진법 변환 2

import sys
from string import digits, ascii_uppercase


def main():
    input = sys.stdin.readline

    alphabet = digits + ascii_uppercase

    args = input().split()
    number_10 = int(args[0])
    base = int(args[1])

    result = []
    while number_10:
        number_10, digit = divmod(number_10, base)
        result.append(alphabet[digit])
    result = ''.join(reversed(result))

    print(result)


main()

$10$진법을 $b$진법으로 변환하기

$123$을 $10$으로 나눈 나머지 $3$은 일의 자리수와 같고, 이어서 그 몫인 $12$를 다시 $10$으로 나눈 나머지 $2$는 십의 자리수와 같습니다. 이 과정을 몫이 $0$이 될 때까지 반복하면 [3, 2, 1]을 얻을 수 있고, 이를 거꾸로 적으면 123이 됩니다.

같은 원리로, 나누는 수를 $10$ 대신 $b$로 바꾸면 $10$진법의 수를 $b$진법으로 변환할 수 있습니다.

divmod 함수

divmod 함수는 몫과 나머지를 동시에 구할 수 있는 함수입니다.

q, r = divmod(123, 10)

그러면 q = $12$, r = $3$이 됩니다.

댓글