2 条题解

  • 0
    @ 2025-9-26 12:47:26

    bitset方法:

    #include <bits/stdc++.h>
    using namespace std;
    
    /*
      题意:
        给定一个 0 < x < 2^32 的正整数,把它看作 32 位二进制(不足补 0),
        交换高 16 位与低 16 位后,输出新的十进制数。
    
      解法(bitset):
        - 用 bitset<32> b(x) 表示 32 位。
        - 低 16 位:lo = b & ((1<<16)-1)
        - 高 16 位:hi = b >> 16
        - 交换后:res = (lo << 16) | hi
        - 输出 res.to_ullong()(值 < 2^32,安全)
    */
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
    
        unsigned long long in;           // 输入可能写成很大的十进制,先用 64 位接
        if (!(cin >> in)) return 0;
        unsigned long long x = in & 0xFFFFFFFFULL;  // 只取低 32 位(题意保证 < 2^32)
    
        bitset<32> b(x);
        bitset<32> maskLow((1ULL << 16) - 1);       // 低 16 位掩码:0000...1111111111111111
    
        bitset<32> lo = b & maskLow;                // 低 16 位
        bitset<32> hi = (b >> 16);                  // 高 16 位(移动到低位区)
    
        bitset<32> res = (lo << 16) | hi;           // 交换拼回 32 位
    
        cout << res.to_ullong() << '\n';
        return 0;
    }
    
    
    • 0
      @ 2025-9-26 12:45:49

      普通方法:

      #include <bits/stdc++.h>
      using namespace std;
      
      int main(){
      	unsigned int n,num1,num2;
      	cin>>n;
      	num1=n<<16;
      	num2=n>>16;
      	cout<<(num1|num2);
      	return 0;
      }
      
      • 1

      信息

      ID
      193
      时间
      1000ms
      内存
      64MiB
      难度
      9
      标签
      递交数
      14
      已通过
      5
      上传者