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진법으로 출력한다.
풀이 과정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);
}
}
댓글남기기