1 분 소요

문제

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

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

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


입력과 출력

입력

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

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


풀이 과정Permalink

자리수 구하기Permalink

B진수로 변환하기 위해서는 N이 B진수로 변할 때 몇 자리가 될지를 먼저 구해야한다.

다음과 같은 방법으로 한 단계씩 제곱을 하며 나눠서 몇 번째 자리수까지인지를 구한다.

string[] s = Console.ReadLine().Split(' ');

int N = int.Parse(s[0]);
int B = int.Parse(s[1]);

int count = 0;  // B진수로 변환할때의 자릿수
while (true)
{
    if(N / (int)Math.Pow(B,count) < B)
    {
        break;
    }
    else
    {
        count++;
    }
}


알파벳 변환Permalink

B진수로 변환하는 과정에서 자릿수가 10~ 35의 값을 가지면 알파벳으로 바꿔준다.


for (int i = count; i >= 0; i--)
{
    int value = N / (int)Math.Pow(B, i);

    // 알파벳이라면
    if (10 <= value && value <= 35)
    {
        result += (char)(value + 65 - 10);
    }
    // 알파벳이 아니라면
    else
    {
        result += value;
    }
    N = N % (int)Math.Pow(B, i);
}

Console.Write(result);


전체 코드Permalink

class Program
{
    static void Main(string[] args)
    {
        string[] s = Console.ReadLine().Split(' ');

        int N = int.Parse(s[0]);
        int B = int.Parse(s[1]);

        string result = "";

        int count = 0;  // B진수로 변환할때의 자릿수
        while (true)
        {
            if(N / (int)Math.Pow(B,count) < B)
            {
                break;
            }
            else
            {
                count++;
            }
        }

        for (int i = count; i >= 0; i--)
        {
            int value = N / (int)Math.Pow(B,i);
            // 알파벳임
            if (10 <= value && value <= 35)
            {
                result += (char)(value + 65 - 10);
            }
            else
            {
                result += value;
            }
            N = N % (int)Math.Pow(B, i);
        }
        
        Console.Write(result);
    }
}

댓글남기기