Koala - 6기/기초 알고리즘 스터디

[백준/C++] 2745번 진법 변환

hoeunwang 2022. 4. 10. 15:40

https://www.acmicpc.net/problem/2745

 

2745번: 진법 변환

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

www.acmicpc.net


문제 해석


진법 수 B와 바꿔 줄 수 N을 입력 받은 후에 10진법의 수로 변환하여 출력하는 문제이다.
2진법을 10진법으로 바꿔주는 원리와, 문자열에서의 각각의 문자는 아스키코드값으로 변환 가능하다는 것을 알고 있다면 문제를 쉽게 해결할 수 있다.


코드


#include <iostream>
#include <string>
#include <cmath>
using namespace std;
string N;
int B;
int result;
int cnt = 0;


int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	cin >> N >> B;

	for (int i = N.length() - 1; i >= 0; i--) {

		if (N[i] >= 'A' && N[i] <= 'Z')
			result += (N[i] - 'A' + 10) * ((int)pow(B, cnt));
		else
			result += (N[i] - '0') * ((int)pow(B, cnt));
		cnt++;
	}
	cout << result << '\n';

	return 0;
}

문제풀이


N과 B를 입력받은 후, 문자열의 N의 길이 -1부터 (배열로 저장할때의 주소값은 -1의 값을 가진다.) 0까지 -1해가며 반복문을 돌려주고, 문자를 int값으로 변환해준 값이 10미만일 때는 '0'을 빼주고 10이상 35이하 일때는 'A'를 빼주고 10을 더해준다. 그런 후 2진수를 10진수로 바꿀때 각 자리수에 2를 곱해준 것처럼 B를 곱해주게 되면 값을 구할 수 있다. (pow()는 거듭제곱을 사용할 수 있는 c++에서 제공하여 주는 함수이다.)