본문 바로가기
알고리즘/백준

알고리즘(C++) / 백준 2745 : 진법 변환

by clean_h 2021. 5. 9.
728x90

2745

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

 

코드

//2745 진법 변환
#include <iostream>
using namespace std;
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	string N;
	int B;

	cin >> N >> B;

	int decimal = 0;
	int b = 1;

	for (int i = N.size() - 1; i >= 0; i--) {
		if (N[i] < 58) {
			decimal += b * (N[i]-48);
		}
		else {
			decimal += b * (N[i] - 55);
		}
		b *= B;
	}

	cout << decimal << "\n";

	return 0;
}

 

설명

B진법 수를 10진법 수로 변경하여 출력한다.

B진법은 2~36진법이 존재한다. 

아스키코드를 이용하여 문제를 풀 수 있었다.

각 자리수는 B의 n승을 의미한다. 각 자리수에 B의 n승을 곱하여 10진수로 나타낼 수 있다. 

 

결과

 

난이도

◐○

728x90

댓글