c# 백준 2745 진법 변환
문제
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의 변환 방법은 다음과 같다.
또 다른 예로 4진수인 32의 변환 방법은 다음과 같다.
알파벳을 숫자로 바꾸기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);
}
}
댓글남기기