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 |