728x90
728x90
문제
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
알고리즘 분류
- 수학
- 구현
문제 출처
https://www.acmicpc.net/problem/11005
11005번: 진법 변환 2
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
문제 해결 방법
- <진법 변환 1> 문제와 정반대의 방식으로 풀었던 문제였다. 10진법에서
B
진법으로 변환하려면, 10진법의 수(N
)를 몫이0
이 될 때까지B
로 계속 나누면서 나머지(mod
)를 구하면 된다.

N
을B
로 나눠가면서 나머지 값(mod
)을 문자열 변수(S
)에 푸시(push_back
) 해준다. 그리고 동시에N
을B
로 나눠주면서N
의 크기를 줄여 나간다. 이와 같은 동작을N
이0
이 될 때까지 반복한다.- 문자열 변수(
S
)에는 나머지 값(mod
)을char
형 데이터(elem
)로 변환하여 넣을 것이다.- 나머지 값(
mod
)이10
이상일 경우,A
부터Z
까지 표시해줘야 하므로55
를 더해준다. - 나머지 값(
mod
)이9
이하인 경우,0
부터9
까지 표시해줘야 하므로48
을 더해준다.
- 나머지 값(
- 문자열 변수(
- 문자열 변수(
S
)에는 요소들이 뒤에서 부터 넣어지게 되므로, 최종적으로 요소의 위치를 역순으로 바꿔주는 작업을 해주어야 한다.<algorithm>
헤더에 있는reverse()
함수를 사용하여 요소의 위치를 뒤집어준다.
string Solution(int n, int b) { int mod; char elem; while (n != 0) { mod = n % b; if (mod > 9) { // 나머지가 10 이상이면 elem = mod + 55; // A ~ Z에 해당하는 문자로 변환한다. (아스키 코드) } else { // 나머지가 1 이상 9 이하이면 elem = mod + 48; // 0 - 9에 해당하는 숫자로 변환한다. (아스키 코드) } S.push_back(elem); n /= b; } // 요소 위치 뒤집기 reverse(S.begin(), S.end()); return S; }
코드
#include <iostream> #include <string> #include <algorithm> using namespace std; int N, B; string S; void Input() { cin >> N >> B; } string Solution(int n, int b) { int mod; char elem; while (n != 0) { mod = n % b; if (mod > 9) { // 나머지가 10 이상이면 elem = mod + 55; // A ~ Z에 해당하는 문자로 변환한다. (아스키 코드) } else { // 나머지가 1 이상 9 이하이면 elem = mod + 48; // 0 - 9에 해당하는 숫자로 변환한다. (아스키 코드) } S.push_back(elem); n /= b; } // 요소 위치 뒤집기 reverse(S.begin(), S.end()); return S; } void Output() { cout << Solution(N, B) << '\n'; } void Solve() { Input(); Output(); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); Solve(); return 0; }
채점 결과

참고
- [단계별로 풀어보기] > [기본 수학 1]
- 브론즈 I
아스키 코드표
- 숫자 :
48
(0) ~57
(9) - 문자
- 대문자 :
65
(A) ~90
(Z) - 소문자 :
97
(a) ~122
(z) - 대문자와 소문자의 차이는
32
- 대문자 :

728x90
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ-14215][C++] 세 막대 (0) | 2023.06.21 |
---|---|
[BOJ-9063][C++] 대지 (0) | 2023.06.20 |
[BOJ-2903][C++] 중앙 이동 알고리즘 (0) | 2023.06.19 |
[BOJ-2720][C++] 세탁소 사장 동혁 (0) | 2023.06.18 |
[BOJ-2745][C++] 진법 변환 (0) | 2023.06.16 |
[BOJ-15894][C++] 수학은 체육과목 입니다 (1) | 2023.03.21 |
[BOJ-9506][C++] 약수들의 합 (0) | 2023.03.11 |
[BOJ-2501][C++] 약수 구하기 (0) | 2023.03.11 |