문제

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

입력

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.

출력

첫째 줄에 10진법 수 N을 B진법으로 출력한다.

풀이

진법 변환 문제의 알고리즘 순서를 역순으로 하면 된다.

1. 0...35 까지 Dictionary에 저장한다. [Int: String]

2.정수 N의 자릿수를 구한다. ( B를 i만큼 곱하고 B^i >= N 인  i를 구함)

3. 각 자리수에서  N / B^j 한 후 배열에 저장 (  j 는 0..< i )

4. Dictionary에 대입해서 문자열로 변환 후 출력

 

import Foundation

var inputs = readLine()!.split(separator: " ").map{ Int64(String($0))}
var number = inputs[0]!
var rad = inputs[1]!
var strArr = [String]()
var count = 0
var num: Int64 = 1
var dict = [Int: String]()

while num <= number {
    num = num * rad
    count += 1
}
var arr = [Int64]()

for i in 0...35 {
    var num = 55
    if i >= 10 {
        dict[i] = String(UnicodeScalar(num+i)!)
    } else {
        dict[i] = String(i)
    }
    
}

for i in 0..<count {
    var num1: Int64 = 1
    for j in i+1..<count {
        num1 = num1 * rad
    }
    if num1 > number {
        arr.append(0)
        continue
    } else {
        arr.append(number / num1)
        number = number - ((number / num1) * num1)
    }
}

strArr = arr.map{ dict[Int($0)]!}
print(strArr.joined(separator: ""))

 

 

+ Recent posts