# 문제
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
# 풀이
바로 지난 글에서 풀이했던 진법 변환의 두 번째 문제다.
이번엔 반대로 10진법 수를 n진법으로 변환하는 문제인데, 앞선 문제를 풀이하지 않았다면 풀어보고 오는 것을 권한다. (2745번 풀이 글 링크)
2745번 문제를 풀었다면 이를 반대로 전개하면 되므로 쉽게 풀 수 있었을 거라 생각한다.
정답 소스코드를 보며 필요한 개념을 정리해보자.
#include <iostream>
using namespace std;
int main(){
ios_base::sync_with_stdio(false); // 두 표준 입출력 동기화 해제
int n, b;
string res;
cin >> n >> b;
while(n > 0){
int tmp = n % b;
if(0 <= tmp && tmp <= 9) res += (tmp+'0');
else res += (tmp-10 + 'A');
n /= b;
}
for(int i=res.length()-1; i>=0; i--){
cout << res[i];
}
return 0;
}
이번 문제에서 출력해야 하는 진법 변환의 결과에는 알파벳도 포함될 수 있으므로 string 배열로 선언해주었다.
지난 번과 다른 것은 0-9일 경우 아스키 코드 값을 이용해 '0'~'9'로 바꾸어주고, 그 외의 값일 경우에는 아스키 코드 값을 이용해 'A'~'Z'로 바꿔주는 것이다. 알파벳으로 변환 시에는 10이 A에 해당하므로 나머지에서 10을 뺀 값에 A의 아스키코드 값을 더해주어야 원하는 결과를 얻을 수 있음에 주의하자.
나머지 값에 대한 연산이 끝났다면 n을 b로 나누어주며 변환을 계속 진행해준다.
변환을 바친 후엔 저장한 결과를 뒤에서부터 출력해주면 최종 결과 값을 얻을 수 있다!
728x90
'백준 > C++' 카테고리의 다른 글
[백준] 2903번: 중앙 이동 알고리즘 | C++ 풀이 (0) | 2023.06.01 |
---|---|
[백준] 2720번: 세탁소 사장 동혁 | C++ 풀이 (0) | 2023.05.31 |
[백준] 2745번: 진법 변환 | C++ 풀이 (0) | 2023.05.29 |
[백준] 2563번: 색종이 | C++ 풀이 (2) | 2023.05.28 |
[백준] 10798번: 세로 읽기 | C++ 풀이 (0) | 2023.05.27 |