https://www.acmicpc.net/problem/2089
(정답률 45.625%)
-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진수를 출력하는 프로그램을 작성하시오.
-13
110111
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
if (num == 0) {
sb.append(num);
}
//num이 0이 될때까지 반복
while (Math.abs(num) >= 1) {
//양수의 나머지를 얻기 위해 절대값을 취함
sb.append(Math.abs(num % -2));
//num을 -2로 나누고 올림
num = (int) Math.ceil((double) num / (-2));
}
System.out.println(sb.reverse());
}
}
이 문제도 수학 문제라.. 직관적으로 와닿지가 않았다.
예를 이해하고 보니까 쉽지만 어떻게 풀어야 할지 방향이 잡히지 않아서 구글링을 하였다.