Study hard
(c++)백준 2089번: -2진수 본문
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
[풀이]
나누어야 할 값이 짝수인 경우 2로 나눈 후 -를 붙여주면 된다. ex) 4 / -2 = -2, - (4 / 2) = -2
그리고 -2진수 값을 저장하는 stack에는 0을 저장한다.
나누어야 할 값이 짝수가 아니면서 음수인 경우는 음수를 양수로 바꾸고 1을 더해준 후 2로 나눠주면 된다.
ex) -5 / -2 = 3, (5 + 1) / 2 = 3
그리고 -2진수 값을 저장하는 stack에는 1을 저장한다.
나누어야 할 값이 짝수가 아닌 양수인 경우는 짝수인 경우와 같이 2로 나눈 후 -를 붙여주면 된다.
ex) 3 / -2 = -1, -(3 / 2) = -1
그리고 -2진수 값을 저장하는 stack에는 1을 저장한다.
#include <iostream>
#include <stack>
using namespace std;
long long Dex;
void solution() {
cin >> Dex;
if (Dex == 0) {
cout << 0 << endl;
return;
}
stack<int>Bin;
while (Dex != 0) {
//나누어질 값이 2의 배수일 때
if (Dex % 2 == 0) {
Bin.push(0);
Dex = -(Dex / 2);
}
else {
if (Dex < 0)
Dex = (-Dex + 1) / 2;//ex)-5/-2 = 3
else
Dex = -(Dex / 2);
Bin.push(1);
}
}
while (!Bin.empty()) {
cout << Bin.top();
Bin.pop();
}
cout << endl;
}
int main() {
solution();
return 0;
}
'백준 > 여러가지 문제들' 카테고리의 다른 글
(c++)백준 1929번: 소수 구하기 (0) | 2020.06.18 |
---|---|
(c++)백준 11576번: Base Conversion (0) | 2020.06.17 |
(c++)백준 1212번: 8진수 2진수 (0) | 2020.06.17 |
(c++)백준 1373번: 2진수 8진수 (0) | 2020.06.17 |
(c++)백준 2745번: 진법 변환 (0) | 2020.06.17 |