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]);
}
}
}
양수 홀짝, 음수 홀짝 경우를 나누어 계산해야 한다.
예제 입력을 손으로 풀어보고 그에 맞추어서 짜자.
'알고리즘 문제 > 백준 온라인 저지' 카테고리의 다른 글
[BOJ] 1978 - 소수 찾기 JAVA (0) | 2021.01.16 |
---|---|
[BOJ] 11576 - Base Conversion JAVA (0) | 2021.01.16 |
[BOJ] 1212 - 8진수 2진수 JAVA (0) | 2021.01.16 |
[BOJ] 1373 - 2진수 8진수 JAVA (0) | 2021.01.16 |
[BOJ] 2745 - 진법 변환 JAVA (0) | 2021.01.16 |