영벨롭 개발 일지

[백준 BOJ][C++]11005번 진법 변환2 풀이 본문

알고리즘 문제 풀이/BOJ

[백준 BOJ][C++]11005번 진법 변환2 풀이

영벨롭 2022. 3. 4. 17:42

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

 

11005번: 진법 변환 2

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

www.acmicpc.net

 

 10진법 수 N을 B진법으로 변환하는 방법은 간단합니다. 

 

 N을 B로 나누어 그 나머지를 저장하고 이 과정을 N이 0이 될 때까지 반복하면 됩니다. 

 

 각각의 나머지들이 저장되는 순서는 정답 순서의 반대이기 때문에 stack의 역할을 하는 vector를 사용하여 나머지를 저장했습니다. 

 

 아스키 코드표에서 알파벳 'A'는 65, 숫자 '0'은 48입니다. 

 

 나머지가 10 이상, 35 이하이면 알파벳으로 표현해야 하기 때문에, 나머지-10+65를 하여 vector에 push 하였고,

 그게 아니라면 숫자 그대로 추가하면 되기 때문에, 나머지+48를 하여 vector에 push하면 됩니다. 

 

#include<iostream>
#include<vector>

using namespace std;

int main(void) {

	int N, B;
	vector<char> ans;

	cin >> N >> B;

	while (N > 0) {
		int temp = N % B;
		char c;

		if (temp >= 10 && temp <= 35) {
			c = temp + 55;
		}
		else {
			c = temp + 48;
		}

		ans.push_back(c);

		N /= B;
	}

	while (!ans.empty()) {
		cout << ans.back();
		ans.pop_back();
	}

	return 0;
}

 

반응형