Study hard

(c++)백준 11576번: Base Conversion 본문

백준/여러가지 문제들

(c++)백준 11576번: Base Conversion

Nimgnoej 2020. 6. 17. 23:06

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

 

11576번: Base Conversion

타임머신을 개발하는 정이는 오랜 노력 끝에 타임머신을 개발하는데 성공하였다. 미래가 궁금한 정이는 자신이 개발한 타임머신을 이용하여 500년 후의 세계로 여행을 떠나게 되었다. 500년 후의

www.acmicpc.net

[풀이]

A진법을 십진수로 변환하고, 변환한 십진수를 다시 B진법으로 변환하면 된다.

A진법을 십진수로 변환하는 방법은 A진수의 각 자릿수만큼 (A^(자릿수)) * (그 자리에 해당하는 값)을 해주면 되고,

십진수를 B진법으로 변환하는 것은 십진수를 0이 될때까지 B로 계속 나누면서 그 나머지를 저장해두면 된다.

 

#include <iostream>
#include <stack>
#include <cmath>//pow
using namespace std;

int A, B, m;
int Dex = 0;
stack<int>Anum;
stack<int>Bnum;

//A진법 십진수로 변환
void getDex() {
	int p = 0;
	while (!Anum.empty()) {
		int cur = Anum.top();
		Dex += pow(A, p)*cur;
		Anum.pop();
		p++;
	}
}

//십진수 B진법으로 변환
void getBnum() {
	while (Dex != 0) {
		int num = Dex % B;
		Dex = Dex / B;
		Bnum.push(num);
	}
}

void solution() {
	cin >> A >> B >> m;
	for (int i = 0; i < m; i++) {
		int n;
		cin >> n;
		Anum.push(n);
	}
	getDex();
	getBnum();
	while (!Bnum.empty()) {
		cout << Bnum.top() << ' ';
		Bnum.pop();
	}
	cout << endl;
}

int main() {
	solution();
	return 0;
}