백준 c++/(1-1)백준 c++ 알고리즘 기초

백준 11005 c++ 진법 변환 2

현구구 2022. 7. 14. 10:00

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

 

11005번: 진법 변환 2

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

www.acmicpc.net


문제

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

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

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

입력

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.

출력

첫째 줄에 10진법 수 N을 B진법으로 출력한다.

 


#include <iostream>
#include <string>
#include <stack>
using namespace std;


int main()
{
	int N, B;//N=10진법 수, B=바꿀 진법
	cin >> N >> B;
	stack<int> result;//결과를 담을 스택

	while (1)
	{
		if (N < B)//입력받은 10진법 수(몫)이 바꿀 진법 수(나누는 수)보다 작으면 그대로 result에 push
		{
			result.push(N);
			break;
		}
		
		result.push(N % B);//B로 나눈 나머지를 result에 담고
		N = N / B; //N은 B로 나누어준다
	}
	while (!result.empty())//stack이 빌 때 까지 출력
	{
		if (result.top() < 10)//result에 들어간 수가 0~9라면 그대로 출력
		{
			cout << result.top();
			result.pop();
		}
		else//만약 10이상이라면 
		{
			cout << char(result.top()+55);//55를 더해 'A'부터 출력되게하고 char로 강제형변환해서 출력
			result.pop();
		}
	}
}

 


아스키 코드를 참고하여 int형에서 char형으로 형변환을 하며 알파벳이 출력되게 하였다