지난번 글에서 진법에 대해 정리를 했었는데 10진법을 n진법으로 바꾸는 방법은 다루지 않았다.
10진법을 n진법으로 바꾸는 내장 함수가 없기 때문에 따로 과정을 하나하나 작성해보려 한다.
먼저, n진법이 무엇인지 간단하게 이야기하자면 0부터 n-1의 수로 모든 자리수를 표기하는 방법이다.
2진법은 0부터 1까지의 수로, 3진법은 0부터 2까지의 수로, ... 10진수는 0부터 9까지의 수로 표기한다.
10진법 수를 n진법 수로 나타내는 방법은 어렵지 않다.
n으로 나눈 나머지를 순서대로가 아닌 거꾸로 읽어주면 n진법 수가 된다.
그러므로 우리는 10진법 수를 n으로 나눈 나머지를 변수에 저장하고 거꾸로 읽어주면 n진법 수가 되는 것이다.
위 과정을 코드로 나타내면 다음과 같다.
answer = ''
while number: # 1)
answer += str(number % n) # 2) n으로 나눈 나머지를 answer에 추가
number //= n # 3)
print(answer)
print(answer[::-1]) # 4) n진법 수
1) number가 존재할 때까지 반복한다. number에는 계속해서 n으로 나눈 몫이 저장될 것이기 때문에 몫이 존재하지 않으면 while문은 종료되는 것이다.
2) 10진수 number를 n으로 나눈 나머지를 구하는 과정이다. 이 나머지를 문자열(str)로 바꿔 answer에 추가해준다.
answer가 문자열인 이유는 마지막에 거꾸로 읽는 과정이 필요하기 때문에 쉽게 뒤집기 위해 문자열로 변수를 선언하는 것이다.
3) 계속해서 나머지를 구하기 위해 number를 n으로 나눈 몫으로 바꾼다.
그럼 이제, number와 n에 각각 수를 넣어 코드를 실행시켜 보자.
number=45, n=3을 대입하여 45를 3진법으로 바꿔보았다.
3진법으로 나타낸 45는 1200이 되어야 하는데 answer를 출력해 보니 0021이 나왔다.
그래서 answer를 뒤집어 주어야 한다.
reverse를 사용할 수도 있지만 슬라이싱을 사용하여 answer[::-1]로 다시 출력하면 원하는 결과를 얻을 수 있다.
이제 우리는 어떤 수가 주어지든 n진법 수를 구할 수 있다!