작성일 :

문제 링크

9313번 - Integer Flipping

설명

지구 기준 32비트 부호 없는 정수의 비트를 역순으로 뒤집어(0번째↔31번째) 다시 부호 없는 정수로 읽어 출력하는 문제입니다. 입력은 -1이 나오면 종료합니다.


접근법

입력값의 최하위 비트를 하나씩 꺼내 결과의 최하위에 넣고 시프트하는 과정을 32번 반복합니다. 이렇게 하면 비트 순서가 뒤집힌 값을 얻을 수 있습니다.



Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;

class Program {
  static void Main() {
    string? line;
    while ((line = Console.ReadLine()) != null) {
      if (line.StartsWith("-1")) break;
      
      var x = uint.Parse(line);
      var res = 0u;
      for (var i = 0; i < 32; i++) {
        res <<= 1;
        res |= (x & 1);
        x >>= 1;
      }
      Console.WriteLine(res);
    }
  }
}

C++

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
#include <bits/stdc++.h>
using namespace std;

typedef unsigned int ui;
typedef unsigned long long ull;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  long long in;
  while (cin >> in) {
    if (in == -1) break;

    ui x = static_cast<ui>(in);
    ui res = 0;
    for (int i = 0; i < 32; i++) {
      res <<= 1;
      res |= (x & 1U);
      x >>= 1;
    }
    cout << static_cast<ull>(res) << "\n";
  }

  return 0;
}