https://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
입력받은 수 num을 0이나올때까지 -2로 나누어주고 그때의 나머지들을 출력한다.
-2진법은 0아니면 1으로 표현되므로, 나머지를 0또는 1로 만들기 위해 홀수가 들어올때는 (num-1)를 해준 후에 -2로 나눠준다.
코드
//2089
#include <iostream>
#include <string>
using namespace std;
#define SIZE 1001
int main(int argc, const char * argv[]) {
int num;
cin >> num;
int mod[SIZE];
for(int i=0;i<SIZE;i++)mod[i] = -1;
if(num==0) {
cout<<"0";
return 0;
}
for(int i=0;i>=0;i++){
if(num==0) break;
if(num%2==1 || -num%2==1) {
mod[i]=1;
num = (num-1)/(-2);
}
else {
mod[i]=0;
num = num/(-2);
}
}
for(int i=SIZE-1;i>=0;i--)if(mod[i] != -1) cout<<mod[i];
return 0;
}
'코딩테스트 연습 > Baekjoon' 카테고리의 다른 글
[Baekjoon] 2745번: 진법 변환 (c++) (0) | 2022.03.31 |
---|---|
[Baekjoon] 2609번: 최대공약수와 최소공배수 (c++) (0) | 2022.03.31 |
[Baekjoon] 2004번: 조합 0의 개수 (c++) (0) | 2022.03.31 |
[Baekjoon] 1978번: 소수 찾기 (C++) (0) | 2022.03.31 |
[Baekjoon] 1935번: 후위 표기식2 (c++) (0) | 2022.03.31 |