2 条题解
-
0
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; }
- 1
信息
- ID
- 193
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 9
- 标签
- 递交数
- 14
- 已通过
- 5
- 上传者