Study hard

(c++)백준 1373번: 2진수 8진수 본문

백준/여러가지 문제들

(c++)백준 1373번: 2진수 8진수

Nimgnoej 2020. 6. 17. 18:45

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

 

1373번: 2진수 8진수

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

www.acmicpc.net

[풀이]

2진수를 8진수로 변환하는 방법은 2진수의 제일 오른쪽부터 3개씩 10진수로 변환하는 것이다.

11001100 = 314

2진수는 가장 뒤에서부터 보고, 8진수는 가장 뒤에 계산된 수를 먼저 출력해야하므로 8진수를 stack에 저장하였다.

 

#include <iostream>
#include <string>
#include <cmath>//pow
#include <stack>
using namespace std;

string Binary;
stack<int>Octal;

void solution() {
	cin >> Binary;
	int Bs = Binary.size();
	int p = 0;//몇 개 봤는지
	int num = 0;
	for (int i = Bs - 1; i >= 0; i--) {

		if(Binary[i]=='1')
			num += pow(2, p);

		//3자리 봤거나 제일 큰 자릿수이면
		if (p == 2 || i == 0) {
			Octal.push(num);
			p = 0;
			num = 0;
		}
		else
			p++;
	}

	while (!Octal.empty()) {
		cout << Octal.top();
		Octal.pop();
	}
	cout << endl;
}

int main() {
	solution();
	return 0;
}

'백준 > 여러가지 문제들' 카테고리의 다른 글

(c++)백준 2089번: -2진수  (0) 2020.06.17
(c++)백준 1212번: 8진수 2진수  (0) 2020.06.17
(c++)백준 2745번: 진법 변환  (0) 2020.06.17
(c++)백준 11005번: 진법 변환 2  (0) 2020.06.17
(c++)백준 9613번: GCD 합  (0) 2020.06.17