Programming Language/Kotlin

[Kotlin] 진수 변환. 알고리즘.

개발왕 금골드 2021. 8. 25. 20:15
반응형

안녕하세요 골드입니다.

오늘은 코틀린에서 진법 변환에 대해서 글을 쓰도록 하겠습니다.


1. N진수 -> 10진수

2진수, 8진수, 16진수로 표현된 "1111"을 10진수로 변경하는 코드입니다.

 

코틀린은 함수 라이브러리가 다양하게 잘 만들어져 있습니다. toInt()에 N을 입력하면 "1111"은 N진수로써 표현되고 이를 toInt() 10진수로 변경하는 함수입니다. 만약 변환하는 데에 올바르지 않은 값을 입력하였다면 NumberFormatException이 나타나게 됩니다.

  • 1111(2) -> 15(10)
  • 1111(8) -> 585(10)
  • 1111(16) -> 4369(10)

 

수학적으로 계산하는 방법은 이렇습니다. 

 

앞서 4비트 "1111"로 예제를 만들었기 때문에 n의 제곱수에 곱해지는 것은 모두 1이며, 2진수, 8진수, 16진수에 해당하는 진수를 n에 대입해서 값을 구할 수 있습니다. 비트 수가 길어지면 위 그림과 같은 방식으로 늘려 나가면 됩니다.

 

 

2. 10진수 -> 2, 8, 16진수

2진수, 8진수, 16진수를 가장 많이 사용하기 때문에 코틀린 라이브러리에서 이 함수들을 제공합니다. 우리는 간단하게 진법을 변환할 수 있겠습니다.

 

앞에서 변환했던 수를 다시 변환했습니다. 

 

 

3. 변환 알고리즘

단순히 함수를 사용해서 만들 수도 있습니다만, 알고리즘이 궁금할 수 있습니다. 제가 이 글을 쓴 목적이기도 합니다. 진법을 변환하는 알고리즘은 매우 간단합니다. 나눗셈 연산자와, 나머지 연산자로 가능합니다. 10진수를 n진수로 변환하는 함수를 만들어 보겠습니다.

 

진수 변환 알고리즘은 이렇습니다. 변환하고자 하는 number와 결괏값의 진법 digits가 주어졌을 때, number 변수가 0이 될 때까지 반복문을 수행합니다. 반복문 안은 위에 코드와 같습니다. 수의 나머지를 구하고 1의 자리부터 값을 쌓아야 하기 때문에 append가 아닌 insert 함수를 사용하였습니다. 이후 number를 나누어서 나머지 자리 수의 수도 구하도록 합니다.

 

 


여기까지 골드였습니다.

감사합니다.

반응형