본문 바로가기
Programming/BOJ

[C/C++] 백준 #2089 -2진수(수학)

by 작은별하나 2023. 3. 28.
반응형

이번 문제는 실제 사용할 일은 거의 없는 -2 진법 이야기입니다.  간혹 수학에서는 마이너스 진법이나 복소수 진법과 관련되어 이야기 되기는 합니다.  대표적으로 \(1+i\)진법 같은 경우가 있습니다.

 

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

 

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, 110

www.acmicpc.net

 

문제 자체는 오답을 낼 가능성이 있는 것을 제외하고는 크게 어렵지는 않습니다.

 

digit art

 

일반적으로 양수 진법이라면, 큰 문제가 없지만, 음수 진법의 경우에는 나머지 연산에 주의해야 합니다.  나머지 연산은 사용하는 언어에 따라서 다릅니다.  양수 나머지는 C, Java, C#, Python 등 어떤 프로그래밍 언어를 쓰든 동일하지만, 음수 나머지는 다릅니다.  그래서 동일한 방법으로 프로그램을 바꿀 수는 없습니다.  저는 그런 부분에 대한 추가 처리를 하고, 기본은 일반적인 진법 연산을 따랐습니다.

 

제가 작성한 소스입니다.

//------------------------------------------------
//    baekjoon #2089
//        - by Aubrey Choi
//        - created at 2019-08-03
//------------------------------------------------
#include <stdio.h>

int main()
{
    int n, r, cp=99;
    char s[100];
    scanf("%d", &n);
    s[99]=0;
    while(n >= 2 || n < 0)
    {
        r = n%(-2);
        n = n/(-2);
        if(r < 0) { n++; r=1; }
        s[--cp]=r+'0';
    }
    s[--cp]=n+'0';
    puts(s+cp);
    return 0;
}
728x90

댓글