본문 바로가기

문과 코린이의, [C. C++] 기록/C++ 백준 문제풀이

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 진법 변환 (2745)

반응형

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 진법 변환 (2745)

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 진법 변환 (2745)

 


 

 

2745번: 진법 변환

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 

www.acmicpc.net

[ 문제 ]

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진법으로 출력한다.

 


[ 코드 ]

#include<iostream>
#include<algorithm>
#include<math.h>
#include<string>
using namespace std;

int main() {
	string N; // B진법 수 N
	int B; // B진법
	cin >> N >> B;

	int result = 0;
	int len = N.length();
	for (int i = 0; i < len; i++)
	{
		if ('0' <= N[i] && N[i] <= '9') // 숫자라면
		{
			result += (N[i]-'0') * (int)pow(B,len-1-i);
			// pow함수는 기본적으로 함수 원형이 double로 되어 있음
			// 제곱근 사용할 때는 pow함수 쓰기
		}
		else // 알파벳 대문자라면
		{
			result += (N[i] - 'A' + 10) * (int)pow(B,len-1-i);
		}
	}

	cout << result;

	return 0;
}
반응형