본문 바로가기

문과 코린이의, [C. C++] 기록/C++ 백준 문제풀이

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 8진수 2진수 (1212)

반응형

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 8진수 2진수 (1212)

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 8진수 2진수 (1212)

 


 

 

1212번: 8진수 2진수

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.

www.acmicpc.net

[ 문제 ]

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

[ 입력 ]

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.

[ 출력 ]

첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.

 


[ 코드 1 ]

#include<iostream>
#include<string>
#include <algorithm>

using namespace std;

string Change8to2(char c) {
	string result = "";
	int num = c - '0';

	if (num == 0)
	{
		return "0";
	}
	
	while (num != 0)
	{
		result += to_string(num % 2);
		// to_string( ) : 숫자 타입의 데이터를 안전하게 string 타입으로 변경하도록 하는 함수
		num = num / 2;
	}
	reverse(result.begin(), result.end());
	// std::reverse 함수 헤더파일 : <algorithm>

	return result;
}

int main() {
	string s;
	cin >> s;

	for (int i = 0; i < s.size(); i++)
	{
		if (i == 0)
		{
			cout << Change8to2(s[i]);
		}
		else
		{
			string temp = Change8to2(s[i]);
			while (temp.size() != 3)
			{
				temp = '0' + temp;
			}
			cout << temp;
		}
	}
}

[ 코드 2 ]

#include<iostream>
using namespace std;

string eight[8] = { "000","001","010","011","100","101","110","111" };

int main() {
	string s;
	cin >> s;

	bool start = true;

	if (s.length() == 1 && s[0]-'0' == 0)
	{
		cout << "0";
	}

	for (int i = 0; i < s.length(); i++)
	{
		int n = s[i] - '0';

		if (start == true && n<4)
		{
			if (n == 0)
			{
				continue;
			}
			else if (n == 1)
			{
				cout << "1";
			}
			else if (n == 2)
			{
				cout << "10";
			}
			else if (n == 3)
			{
				cout << "11";
			}
			start = false;
		}

		else
		{
			cout << eight[n];
			start = false;
		}
	}

	return 0;
}

* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형