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

문제

-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

 

 

 

 

 

 

풀이 .

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));
        int n = Integer.parseInt(br.readLine());
        if(n == 0) {
            System.out.println(0);
            return;
        }

        int[] arr = new int[100];
        int idx = -1;
        while(n != 1) {
            if(n < 0) {
                if((n*-1) % 2 == 1) {  // 음홀
                    n = n / -2 + 1;
                    arr[++idx] = 1;
                }else {  // 음짝
                    n = n / -2;
                    arr[++idx] = 0;
                }
            }else {
                if(n % 2 == 1) {  // 양홀
                    n = n / -2;
                    arr[++idx] = 1;
                }else {  // 양짝
                    n = n / -2;
                    arr[++idx] = 0;
                }
            }
        }
        arr[++idx] = 1;
        for(int i = idx; i >= 0; i--) {
            System.out.print(arr[i]);
        }
    }
}

 

양수 홀짝, 음수 홀짝 경우를 나누어 계산해야 한다.

예제 입력을 손으로 풀어보고 그에 맞추어서 짜자.

+ Recent posts