Study hard
(c++)백준 2089번: -2진수 본문
https://www.acmicpc.net/problem/2089
[풀이]
나누어야 할 값이 짝수인 경우 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 |