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형으로 형변환을 하며 알파벳이 출력되게 하였다
'백준 c++ > (1-1)백준 c++ 알고리즘 기초' 카테고리의 다른 글
백준 11727 c++ 2xn 타일링 2 (0) | 2022.07.14 |
---|---|
백준 11726 c++ 2xn 타일링 (0) | 2022.07.14 |
백준 17103 c++ 골드바흐 파티션 (0) | 2022.07.13 |
백준 2089 c++ -2진수 (0) | 2022.07.12 |
백준 1212 c++ 8진수 2진수 (0) | 2022.07.12 |