题解 AT1157 【2015】

under 题解 AT1157


题意

给定数字 $N$,判断它的二进制是否是回文。

二进制?当然是用 bitset!

$O( \frac{n}{w})$ 的时空复杂度、实现了与 unsigned longstd::string 之间的类型转换,简直不要更好用!

直接上代码,注释才是本体

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
#include<algorithm>
#include<bitset> // std::bitset 头文件
#include<cmath>
#include<iostream>
#include<string>

using namespace std;

int N;
bitset<32> bit; // N <= 10^9,不少于 30 位
string s, r;

int main() {
cin >> N;
bit = (unsigned)N;
// bitset 支持与 unsigned long 之间使用 = 运算符赋值

s = r = bit.to_string().substr(32 - log2(N));
// 成员函数 to_string() 返回 std::string
// 注意高位不足时会用 '0' 补齐,要去除高位的 '0'

reverse(r.begin(), r.end());
cout << (s == r ? "Yes" : "No") << '\n';
// 判断并输出

return 0;
}

我永远爱STL

文章作者: fa_555
文章链接: https://blog.fa555.tech/2019/%E9%A2%98%E8%A7%A3-AT1157-%E3%80%902015%E3%80%91/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 fa_555's Blog