c# 백준 11005 진법 변환2
문제
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, …, F: 15, …, Y: 34, Z: 35
입력과 출력
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다. 출력
첫째 줄에 10진법 수 N을 B진법으로 출력한다.
풀이 과정
자리수 구하기
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++;
    }
}
알파벳 변환
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);
전체 코드
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);
    }
}
 
      
댓글남기기