본문으로 바로가기

[백준] 알고리즘 2745번 - 진법 변환

category Algorithm 2020. 12. 15. 17:22

#include <bits/stdc++.h>
using namespace std;
 
 
int main() 
{
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	string s;
	long sum = 0;
	int b,trans=0;
	cin >> s >> b;
	int flag = s.size() - 1;
	while (flag >= 0) {
		for (int i = 0; i < s.size(); i++)
		{
			if ('A' <= s[i] && s[i] <= 'Z') {
				trans = s[i] - 'A'+10;
			}
			else {
				trans = s[i] - '0';
			}
			sum += (trans * pow(b, flag));
			flag--;
		}
	}
	cout << sum;
}
 

진법 변환2의 문제와 거꾸로 생각해주면 된다.

흔히 2진법 계산의 결과를 다시 변환하기 전의 숫자로 돌아가는 과정을 생각하면 된다.

12를 이진법으로 나타내면 1100(2) 이다.

1100(2) = 1*2^3+1*2^2+0*2^1+0*2^0 을 해준 결과와 같다.

2진법의 계산과정을 알게되었으니, n진법도 똑같이 해주면된다.

다만, A의 시작이 10부터 Z의 끝이 35로 끝나니 +10을 해줘야 한다.