본문 바로가기

Algorithm/Math

(C++) - 백준(BOJ) 2998번 : 8진수

반응형

https://www.acmicpc.net/problem/2998

 

2998번: 8진수

문제 창영이는 여러 가지 진법을 공부하고 있다. 창영이는 어제 2진법을 배웠고, 오늘은 8진법을 배웠다. 이제, 2진법 수를 8진법 수로 변환하려고 한다. 창영이가 사용한 방법은 다음과 같다. 2진수의 길이가 3으로 나누어 떨어질 때 까지 수의 앞에 0을 붙인다. 그 다음, 3자리씩 그룹을 나눈다. 아래의 표를 참고해 8진수로 바꾼다. 2진수가 주어졌을 때, 창영이가 사용한 방법을 이용해 8진수로 바꾸는 프로그램을 작성하시오. 000 0 001 1 010

www.acmicpc.net

간단한 진법 변환 문제였습니다.

 

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
32
33
34
35
36
37
38
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
 
int main() {
    string n, ans;
    cin >> n;
    int len = n.size();
    int sum = 0;
    int cnt = 0;
    for (int i = len-1; i >= 0; i--)
    {
        cnt++;
 
        //1을 발견했다면 2^(cnt-1)해준다.
        if(n[i]=='1')
            sum += pow(2, cnt-1);
 
        //마지막이라면 더해주고 루프 탈출
        if (i == 0)
        {
            ans += sum + '0';
            break;
        }
 
        //3번째글자가 되었다면 초기화
        if (cnt == 3)
        {
            ans += sum + '0';
            sum = 0;
            cnt = 0;
        }
 
    }
    for (int i = ans.size() - 1; i >= 0; i--)
        cout << ans[i];
}
cs