
오래 고민을 해봤지만 도저히 풀리지 않아서 구글 검색을 하며 이해를 했다. 이해한 것을 잊어버리지 않기 위해 작성한다. 새로 알게된 메서드도 잘 기억해두자.
-2진수를 구하는 방법은 -13을 예시로 들면
으로 나타낼 수 있다. 그러므로 -13의 결과는 110111이다. 이것은 -2로 나눴을 때 몫을 반올림한 값이 다음에 나워지는것을 알 수 있다.
ex) -13/-2=6.5 -> 7
7/-2=-3.5 -> -3
import java.io.*;
public class beak_2089 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
if(N == 0){
sb.append(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());
}
}
Math.abs(~~~);
받는 인자값을 절댓값을 씌운 후 리턴한다.
Math.ceil(~~~);
괄호 안의 숫자를 가장 가까운 더 큰 정수로 올림한다. 예를들면 Math.ceil(3.1)은 4가 되고 Math.ceil(-1.6)은 -1이 된다.