난 -2진법이라길래 2진법으로 이루어진 수의 보수를 구하는 것이라고 생각했다.
그래서 2진법을 -2진법으로 바꾸기 위해서 보수를 만드는 과정을 찾아봤었다.
그 과정에서 시프트 연산자 ~
>>
등도 찾아보고 했는데, 예시 답안에 전혀 근접할 수 없었다.
결과
포기. 문제 의도도 이해가 안 가고 이게 진법인가? 의문도 드는 난해한 문제.
근데 그냥 2로 나누는 게 아니라 -2로 나누는 것인데, 그 경우의 수가 음수와 0이 추가되어 까다로워진 것 뿐이었다.
골치가 아프다. 이게 공식이 아니라 그냥 문제풀이로 만든 거겠지..?
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());
StringBuilder sb = new StringBuilder();
if (N == 0) { // 0인 경우 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());
}
}
아래가 제일 설명을 잘했는데 이거 보고도 모르겠음
https://programming-beard.tistory.com/107
문제 링크