본문 바로가기

문과 코린이의, [C. C++] 기록/C++ 백준 문제풀이

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 진법 변환 2 (11005)

반응형

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 진법 변환 2 (11005)

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 진법 변환 2 (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<algorithm>
#include<string>
using namespace std;


int main() {
	int N, B; // 10진법 수 N, B진법
	cin >> N >> B;

	string result = "";

	while (N>0)
	{
		int r = N % B;

		if (r<10)
		{
			result += (char)(r + '0');
			// '0'은 ASCII로 48 -> 문자로 변환시켜주려면 int값에 '0'문자를 더해줘야 함
		}
		else
		{
			result += (char)(r - 10 + 'A');
			// 'A'는 ASCII로 65 -> 10을 문자 A로 변환시켜주려면, 숫자 10을 빼고 'A'를 더해주거나, 55를 더해줘야 함
		}

		N /= B; // 나눠줘야 다음 연산 진행
	}

	reverse(result.begin(), result.end()); // 문자열 순서 바꿔주기

	cout << result << '\n';

	return 0;
}
반응형