백준

백준 11005번 c#

대왕군 2024. 1. 25. 18:08

using System;

namespace Baekjoon
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //그냥 콘솔창 예쁘게 꾸미는 코드(심심해서 넣음)
            Console.BackgroundColor = ConsoleColor.DarkCyan;

            //입력값 받아옴
            string[] input = Console.ReadLine().Split();
            //입력값 첫번째는 10진수 변수에 저장
            int decimalNum = int.Parse(input[0]);
            //입력값 두번째는 변환할 n진수 변수에 저장
            int convertBaseNum = int.Parse(input[1]);

            //10진수를 n진수로 변환하는 메소드 실행, 동시에 반환값 받고 출력
            Console.WriteLine(ConvertToBase_N(decimalNum, convertBaseNum));

        }

        //1 : 10진수를 n진수로 변환하는 법은 다음과 같다
        //2 : 10진수를 n으로 나누어 몫과 나머지를 구한다
        //3 : 나머지는 결과값의 맨앞자리에 나열한다
        //4 : 몫은 다시 n으로 나누어 몫과 나머지를 구한다
        //5: 3,4번을 반복하다가 몫이 0이 나오는 경우 마지막 나머지까지 결과값의 맨 앞자리에 나열한 뒤에 계산을 끝낸다

        //10진수를 n진수로 바꿔주는 코드
        static string ConvertToBase_N(int decimalNum, int convertBaseNum)
        {
            //현재 계산 중인 몫을 넣기 위한 변수
            int currentNum = decimalNum;
            //현재 계산중인 나머지를 넣기 위한 변수
            int remain = 0;
            //결과값 저장할 변수
            string result = "";

            while (true)
            {
                //currentNum이 나머지 구하기 전에 바뀌는 걸 방지하기 위해 나머지 계산 먼저 해줌
                remain = currentNum % convertBaseNum;
                //나머지 계산을 해주었다면 이후 (현재 몫 / 바꿀진법)을 해줌
                currentNum = currentNum / convertBaseNum;

                //만약 바꿀 진법이 11진법 이상이면서 나머지가 10 이상일때 실행
                //즉, 표기값이 알파벳이 될때임
                if (convertBaseNum > 10 && remain > 9)
                {
                    //remain - 10 + 'A'은 10이상의 숫자를 알파벳으로 나타낼 때 쓰는 공식임
                    //이후 계산하여 나온 아스키코드값을 char형으로 강제변환 시키고
                    //임시변수 temp에 저장해줌
                    char temp = (char)(remain - 10 + 'A');
                    //나머지를 알파벳으로 변환한 값 temp를 result 변수의 맨 앞자리에 붙임
                    result = temp + result;
                }
                //표기값을 알파벳으로 바꿔줄 필요가 없을 때 실행
                else
                {
                    //위에서 계산한 현재의 나머지를 result 변수의 맨 앞자리에 붙임
                    result = remain.ToString() + result;
                }
                //만약 몫이 0이라면 실행(0에서 더 나눌 것 없으므로 코드 끝냄)
                if (currentNum == 0)
                {
                    //결과값 반환
                    return result;
                }
            }
        }


    }
}

 

 

확실히 공식을 알고 나니까 진법 변환하는 코드 짜는게 쉬워졌다

'백준' 카테고리의 다른 글

백준 2903번 c#  (0) 2024.01.26
백준 2720번 c#  (0) 2024.01.25
백준 2745번 c#  (0) 2024.01.24
백준 2563번 c#  (0) 2024.01.23
백준 10798번 c#  (0) 2024.01.22