반응형
문제
-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 진수를 구할 계획이다.
- 입력을 받는다.
- 입력받은 값을 -2 로 나누어 주면서 출력 문자열에 나머지값들을 저장해 간다.
- 문자열을 거꾸로 출력한다.
코드는 다음과 같다.
#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;
}
음수라고 겁먹지 말고 그냥 다른 진수 구하기 문제처럼 풀면 되는 문제였다. 이 것으로 글을 마치겠다.
반응형
'뭐라도 공부해보자!!( 이론 ) > 자료구조 및 알고리즘' 카테고리의 다른 글
백준 1463, 1로 만들기 (1) | 2023.11.29 |
---|---|
백준 2089, 골드바흐 파티션 (1) | 2023.11.28 |
백준 1212번, 8 진수 2 진수 (1) | 2023.11.27 |
백준 1373번, 2진수 8진수 (0) | 2023.11.27 |
17087 백준, 숨바꼭질 6 (2) | 2023.11.25 |