11005번: 진법 변환 2
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
문제 해결 전략
10진법의 수를 B진법(2<=B<36)으로 바꾸는 문제이다.
10진법의 수를 B로 나머지 연산을 하여 num이라는 변수에 저장을 하였다. 그리고 n은 몫으로 바꿔주었다.
num(나머지 수)이 10 이하의 수이면 그대로 표현해주면 된다. 그런데 num이라는 변수는 10진법의 정수이다.
따라서 ASCII 코드를 이용하여 '0'이라는 문자를 더하여 (char) 해주면 정수에서 ASCII 코드의 숫자를 나타내는
문자로 바뀌게 된다.
그리고 num이 10 이상의 수이면 10은 A, 11은 B, .... 이렇게 표현이 된다. 따라서 A라는 ASCII 코드는 65에 해당하므로
'A'를 더해주었다. 하지만 그냥 더해주면 안 되고, num에 -10을 해줘야 10부터 A라는 문자로 표현된다.
마지막은 문자열을 더했으므로 reverse 해주었다.
소스
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n, m;
cin >> n >> m;
string ans = "";
while(1) {
if(n == 0) break;
int num = n % m;
n = (n / m);
if (num < 10) {
ans += (char)(num + '0');
} else { // num > 10
ans += (char)(num - 10 + 'A');
}
}
reverse(ans.begin(), ans.end());
cout << ans;
}
'알고리즘과 자료구조 > 백준' 카테고리의 다른 글
BOJ 13458 시험 감독 (0) | 2020.11.01 |
---|---|
BOJ 2018 수들의 합 5 (0) | 2020.10.26 |
BOJ 14889 스타트와 링크 (0) | 2020.10.20 |
BOJ 16234 인구 이동 (0) | 2020.10.20 |
BOJ 17143 낚시왕 (0) | 2020.10.17 |