본문 바로가기
Develop/백준 (Cpp)

[백준] 1373번 : 2진수 8진수 (C++)

by Tarra 2023. 2. 7.

1373번 : 2진수 8진수


문제 )

2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오.

 

 

입력 :

첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.

 

 

 

출력 :

첫째 줄에 주어진 수를 8진수로 변환하여 출력한다.

 

 

 

 

 

풀이)

분명 풀이가 제대로 맞는거 같은데 자꾸 틀려서 

 

문제를 해결하느라 한참이 걸렸다.

 

이유는 입력으로 주어지는 수의 길이가 최대 100만인데, 이정도 크기의 숫자는

 

long long으로도 처리가 되지 않기 때문에 코드에 문제가 생긴 것이었다.

 

따라서 2진수를 8진수로 바꾸기 위해서는

 

해당 문자열을 3개씩 끊어서 8진수로 변환하는 방법이 가장 적합하다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <math.h>
 
using namespace std;
 
int main() {
 
    string str; 
    cin >> str;
 
    while (str.length() % 3 != 0) {
        str = '0' + str;
    }
 
    for (int i = 0; i < str.length(); i += 3) {
        int num = (str[i] - '0'* 4 + (str[i + 1- '0'* 2 + (str[i + 2- '0'* 1;
        cout << num;
    }
 
    return 0;
}
cs

출처 : https://www.acmicpc.net/problem/1373 

 

1373번: 2진수 8진수

첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.

www.acmicpc.net