2745번: 진법 변환

문제:

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

입력:

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)

B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.

풀이:

🧐 잘 이해가 안된다면 아무 수를 정한 뒤 몇진법으로 바꿀지 정한 뒤 정한수 = n(진법)*(정한수/n)(결과 값이 소수인 경우 반내림)+나머지를 적어서 n진법으로 바꾼 뒤 거꾸로 어떻게 해야 다시 처음 정한 값으로 갈 수 있을 지 생각해보면 쉽게 이해가 될 것이다.

코드:

#include <iostream>

using namespace std;

int main(){
	string numbers;
	int n, answer=0;
	//입력 
	cin >> numbers >> n;
	//N진법의 수 10진법으로 변환 
	for(int number: numbers){
		//알파벳인 경우(11진법 이상인 경우) 
		if(number >= 'A' && number <= 'Z') answer = answer*n+(number-'A'+10);
		//숫자인 경우(10진법 이하인 경우) 
		else if(number >= '0' && number <= '9') answer = answer*n+(number-'0');
	}
	//출력 
	cout << answer;
}