본문 바로가기

뭐라도 공부해보자!!( 이론 )/자료구조 및 알고리즘

백준 2089, -2 진수

반응형

문제

-2진법은 부호 없는 2진수로 표현이 된다. 2진법에서는 20, 21, 22, 23이 표현 되지만 -2진법에서는 (-2)0 = 1, (-2)1 = -2, (-2)2 = 4, (-2)3 = -8을 표현한다. 10진수로 1부터 표현하자면 1, 110, 111, 100, 101, 11010, 11011, 11000, 11001 등이다.

10진법의 수를 입력 받아서 -2진수를 출력하는 프로그램을 작성하시오.

입력

첫 줄에 10진법으로 표현된 수 N이 주어진다.

출력

-2진법 수를 출력한다.

제한

  • -2,000,000,000 ≤ N ≤ 2,000,000,000

예제 입력 1

-13

예제 출력 1

110111

 

 진수의 정의와 변환 방법에 대해서 잘 이해하고 있냐를 묻는 문제이다. 어떤 수의 2 진수를 구하기 위해 2 로 해당수를 0 내지는 1이 될 때까지 나누어주면서 얻은 나머지 값들을 거꾸로 나열하면 그 수의 2 진수가 나온다. 같은 방법으로 -2 진수를 구할 계획이다.

 

  1. 입력을 받는다.
  2. 입력받은 값을 -2 로 나누어 주면서 출력 문자열에 나머지값들을 저장해 간다.
  3. 문자열을 거꾸로 출력한다.

 

 코드는 다음과 같다.

 

#include <iostream>
#include <string>


int main() 
{
	int N;
	std::cin >> N;

	std::string out;

	if (N == 0) 
	{
		std::cout << '0';
	}

	while (N != 0) 
	{
		if (N%-2 == 0) 
		{
			out += '0';
			N /= -2;
		}
		else 
		{
			out += '1';
			N = (N-1) / -2;
		}
	}

	for (int i = out.length() - 1; i >= 0; i--) 
	{
		std::cout << out[i];
	}

	return 0;
}

 

 음수라고 겁먹지 말고 그냥 다른 진수 구하기 문제처럼 풀면 되는 문제였다. 이 것으로 글을 마치겠다.

반응형