2089번 - -2진수
-2진수라 해서 특별한 방법이 있는것은 아니고 , 다른 진수 변환이랑 비슷하긴 한데 중간 과정에서 처리해줘야 할 조건이 조금 있었다.
나는 그냥 2진수 처럼 풀면서 필요한 부분에 - 만 하면서 진수 변환을 시켜줬다.
N이 음수일 때, 또 나누어 떨어질 때, 그러지 않을 때 나눠야 했다. 처음에 틀렸다가 예시로 주어진 1,2,3,4 를 대입해보던 중에
4에서 조건을 또 처리해야 한다는 걸 느껴서 바꿨다.
그리고 N이 0일 경우를 따로 체크해줘야 했다.
<정답 코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include<iostream> #include<algorithm> #include<vector> using namespace std; int main() { int N; vector<int> v; cin >> N; if (N != 0) { while (N != 0) { if (N < 0) { v.push_back(-N % 2); if ((-N % 2) != 0) { N = (-N / 2) + 1; } else { N = (-N / 2); } } else { v.push_back(N % 2); N = -(N / 2); } } reverse(v.begin(), v.end()); for (int i = 0; i < v.size(); i++) { cout << v[i]; } cout << endl; } else { cout << "0" << endl; } return 0; } | cs |
반응형