안녕하세요. BlockDMask 입니다.
오늘은 11005번 진법 변환2 을 풀어보았습니다.
블로그 글을 늦게 올려서... 어제(9/18)일자 문제입니다.
0. 제목
백준 11005 진법 변환 2
BOJ 11005 진법 변환 2
1. 문제설명
10진수 수 n 이 주어지고
( n <= 1,000,000,000)
이 수를 b 진법으로 바꾸어 출력하는 프로그램을 작성하면됩니다.
( 2 <= b <= 26 )
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 숫자가 존재 하므로, 이런 경우에는 알파벳 대문자를 사용합니다.
A : 10
B : 11
C : 12
D : 13
E : 14
F : 15
G : 16
.
.
.
X : 33
Y : 34
Z : 35
입니다.
ex1) 10진수 1000을 18진수로 표현하면 - 31A
ex2) 10진수 103을 2진수로 표현하면 - 1100111
2. 풀이과정
vector container를 이용하여 풀었습니다.
vector container의 자세한 설명은 [여기] 있습니다.
1) while 반복문을 통해서 10진수 N 을 진수 B로 나눈 나머지를 vector에 push_back()을 통해 넣어줍니다.
N 이 0 이 될때 까지, N을 B로 나누면서 나머지를 넣어줍니다.
2) vector container에 넣은 숫자를 뒤에서 부터 읽어줍니다.
vector<int>::reverse_iterator 를 이용하여 rbegin() 부터 rend() 까지 iterator를 돌리며 출력합니다.
3) 출력을 할때는 10보다 작은 숫자는 그대로 숫자로
10이상의 수는 A~Z 까지 출력해야 하므로 아스키 코드상에서의 문자로 바꾸어 줍니다.
10이상이므로 10을 빼준 후 'A' 만큼 더해줍니다.
3. 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include<iostream> #include<vector> using namespace std; int main(void){ int n; //변환할 10진수 숫자 cin >> n; int b; //반환할 베이스 진수 cin >> b; vector<int> v; while(1){ v.push_back(n%b); //해당 진수로 나눈 나머지를 vector에 넣음 n /= b; if(n==0) break; } vector<int>::reverse_iterator iter; for(iter = v.rbegin(); iter != v.rend(); iter++){ if(*iter>=10){ char c = *iter-10+'A'; //10 이상의 알파벳은 char 타입으로 출력 cout << c; }else{ cout << *iter; //10 미만의 수는 int 타입으로 출력 } } return 0; } | cs |
4. 인증
문제 출처 - https://www.acmicpc.net/problem/11005
감사합니다. 도움이 되셨다면 하트 버튼 부탁드립니다.
'<알고리즘 문제풀이&연습> > [C++] 백준, 프로그래머스 등등' 카테고리의 다른 글
[백준 1427] 소트인사이드 (2) | 2017.09.23 |
---|---|
[백준 1316] 그룹 단어 체커 (4) | 2017.09.21 |
[백준 9012] 괄호 (stack) (0) | 2017.09.20 |
[백준 1016] 제곱ㄴㄴ수 (0) | 2017.09.19 |
[백준 2908] 상수 (4) | 2017.09.17 |
[백준 2675] 문자열 반복 (0) | 2017.09.17 |
[Level 4] 숫자의 표현 (0) | 2017.09.15 |
[Level 3] 멀리 뛰기 (jumpCase) (0) | 2017.09.14 |