문제
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.
출력
첫째 줄에 10진법 수 N을 B진법으로 출력한다.
예제 입력 1
60466175 36
예제 출력 1
ZZZZZ
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, b;
string result;
cin >> n >> b;
while(n) {
char c;
if(n % b < 10) {
result += to_string(n % b);
n /= b;
}
else {
c = n % b - 10 + 'A';
n /= b;
result += c;
}
}
reverse(result.begin(), result.end());
cout << result << '\n';
return 0;
}
2진법 변환만해도 10진수 이하의 진법변환은 쉽게 생각하고 알고리즘을 짤 수 있다.
이제 10진수 이상의 진수변환이 문제인데 바로 숫자가 아닌 알파벳으로 나타내기 때문이다.
10 = 'A', 11 = 'B' ... 해서 알파벳으로 숫자가 치환된다.
따라서 아스키코드 연산을 이용하면 편리한데 예를들어 30을 16진수로 나타낸다고 해보자.
그러면 30을 16으로 나눈 나머지는 14일것이다.
10이 A이므로 14는 E일것이다.
다시 생각해보면 아스키 코드상 대문자의 0번째는 A이고 4번째는 E라는 뜻이다.
따라서 14 - 10 + 'A'를 해주면 원하는 E를 얻을 수 있다.
그래서 c = n % b - 10 + 'A'가 나오게 된것이다.
이런 알고리즘을 짜준후 나온 결과를 문자열에 더해준다음 거꾸로 출력해주면 된다.
'PS > 백준' 카테고리의 다른 글
백준 / 수학 / 11576번 / Base Conversion / C++ (0) | 2021.08.13 |
---|---|
백준 / 수학 / 2745번 / 진법 변환 / C++ (0) | 2021.08.12 |
백준 / 수학 / 17103번 / 골드바흐 파티션 / C++ (2) | 2021.08.10 |
백준 / 수학 / 2089번 / -2진수 / C++ (0) | 2021.08.09 |