ALGORITHM

[JAVA] 백준 2089번- -2진수

연듀 2022. 10. 21. 22:06

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

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int n = Integer.parseInt(br.readLine());

        if(n==0) System.out.println(0);
        else{
            while(n!=1){
                sb.append(Math.abs(n % -2));
                n = (int)Math.ceil((double)n/(-2));
            }
            sb.append(n);

            System.out.println(sb.reverse());
        }

    }
}

 

음수를 어떻게 표현해야할지 모르겠어서 다른 블로그를 참고했다.

 

문제에서 주어진 -13으로 생각해보면,

 

-13 = (-2 * 7) + 1

7 = (-2 * -3) + 1

-3 = (-2 * 2) + 1

2 = (-2 * -1) + 0

-1 = (-2 * 1) + 1

 

이런식으로 진행된다. 

 

일반 이진법이랑 비슷하게 입력받은 수를 -2로 나누면서 그 나머지를 구하면된다.

 

주의해야할 점은 이진법으로 표현할 나머지는 항상 양수이므로 절댓값을 취해주고, 몫은 올림처리 해주어야 한다.

 

 

 

참고: https://bellossimo.tistory.com/56