728x90
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진법으로 출력한다.
코드
//11005 진법 변환2
#include <iostream>
#include <stack>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
long long N;
int B;
stack <char> s;
char c;
cin >> N >> B;
while (N > 0) {
c = N % B;
N /= B;
if (c >= 10) {
s.push(c + 55);
}
else
s.push(c + 48);
}
while (s.size()) {
cout << s.top();
s.pop();
}
cout << "\n";
return 0;
}
설명
B진법으로 출력한다. 이때 B는 2~36이다. 따라서 2진법에서부터 36진법으로 나타낼 수 있다.
B진법은 B로 나눠서 N이 0보다 작을 때까지 나머지를 저장한다.
0부터 9까지는 수로 표현이 가능하지만 10부터 35까지는 한가지 숫자로 표현이 불가능하다. 따라서 알파벳으로 표현한다. stack은 first in last out이다. 가장 먼저 들어간 문자는 가장 나중에 출력되는 stack을 이용하여 출력할 수 있다.
결과
난이도
◐○○○○
728x90
'알고리즘 > 백준' 카테고리의 다른 글
알고리즘(C++) / 백준 2331 : 반복수열 (0) | 2021.05.11 |
---|---|
알고리즘(C++) / 백준 2745 : 진법 변환 (0) | 2021.05.09 |
알고리즘(C++) / 백준 10451 : 순열 사이클 (0) | 2021.05.04 |
알고리즘(C++) / 백준 9613 : GCD 합 (0) | 2021.05.04 |
알고리즘(C++) / 백준 1850 : 최대공약수 (0) | 2021.05.04 |
댓글