<알고리즘 문제풀이&연습>/[C++] 백준, 프로그래머스 등등

[백준 11005] 진법 변환 2

BlockDMask 2017. 9. 19. 19:11
반응형
  • 안녕하세요. 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==0break;
    }   
 
    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

감사합니다. 도움이 되셨다면 하트 버튼 부탁드립니다.

반응형