1 분 소요

문제

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

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

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


입력과 출력

입력

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)

B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.

출력

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


풀이 과정Permalink

N진수를 10진수로 변환하기Permalink

N진수를 10진수로 변환하는 방법은 N진수 숫자의 뒷자리부터 순서대로 숫자 * N ^(자리수_순서 - 1)임을 알 수 있다.

예를들어 36진수인 ZZZZZ의 변환 방법은 다음과 같다.

image


또 다른 예로 4진수인 32의 변환 방법은 다음과 같다.

image


알파벳을 숫자로 바꾸기Permalink

A부터 Z까지 10~ 35를 의미한다.

이것은 아스키 코드를 이용하여 A가 65임을 생각하여 A를 아스키코드로 변환 후 - 65 + 10을 하면 된다.

전체 코드Permalink

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

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

        double result = 0;

        char[] c = N.ToCharArray();

        int count = 0;
        for (int i = c.Length - 1; i >= 0; i--)
        {
            int num;
            // 알파벳이라면
            if ('A' <= c[i] && c[i] <= 'Z')
            {
                // 알파벳의 시작 아스키코드 65를 뺴주고
                // 알파벳의 시작은 10을 뜻하므로 10을 더해줌
                num = (int)c[i] - 65 + 10;
            }
            else
            {
                num = int.Parse(c[i].ToString());
            }

            result += Math.Pow(B, count) * num;
            count++;
        }

        Console.Write(result);
    }
}

댓글남기기