正经题解&逐行注释&加密版
2026-03-21 14:52:25
发布于:广东
代码:
#define _ ;
#define __ (
#define ___ )
#define ____ {
#define _____ }
#define ______ int
#define _______ i
#define ________ using
#define _________ namespace
#define __________ std
#define ___________ main
#define ____________ n
#define _____________ num
#define ______________ cin
#define _______________ >>
#define ________________ count
#define _________________ =
#define __________________ 0
#define ___________________ for
#define ____________________ 1
#define _____________________ <=
#define ______________________ ""
#define _______________________ string
#define ________________________ ++
#define _________________________ b
#define __________________________ while
#define ___________________________ >
#define ____________________________ char
#define _____________________________ '0'
#define ______________________________ +
#define _______________________________ &
#define ________________________________ >>=
#define _________________________________ r
#define __________________________________ reverse
#define ___________________________________ .begin
#define ____________________________________ ,
#define _____________________________________ .end
#define ______________________________________ if
#define _______________________________________ ==
#define ________________________________________ cout
#define _________________________________________ <<
#define __________________________________________ return
#include <iostream> // 输入输出头文件
#include <string> // 字符串操作头文件
#include <algorithm> // 包含 __________________________________ 反转函数
________ _________ __________ _
______ ___________ __ ___ ____
______ ____________ _
______________ _______________ ____________ _ // 输入目标数字 ____________
______ ________________ _________________ __________________ _ // 统计二进制回文数的数量,初始为 __________________
// 遍历 ____________________ 到 ____________ 的所有数字
___________________ __ ______ _______ _________________ ____________________ _ _______ _____________________ ____________ _ _______ ________________________ ___ ____
_______________________ _________________________ _________________ ______________________ _ // 存储当前数字的二进制字符串
______ _____________ _________________ _______ _ // 临时变量,避免修改循环变量 _______
// 十进制转二进制(核心步骤)
__________________________ __ _____________ ___________________________ __________________ ___ ____
// _____________ _______________________________ ____________________ :取 _____________ 的二进制最后一位( __________________ 或 ____________________ ),转换为字符后拼在 _________________________ 头部
_________________________ _________________ ____________________________ __ _____________________________ ______________________________ __ _____________ _______________________________ ____________________ ___ ___ ______________________________ _________________________ _
_____________ ________________________________ ____________________ _ // 右移 ____________________ 位,等价于 _____________ = _____________ / 2(整数除法)
_____
// 判断是否为回文
_______________________ _________________________________ _________________ _________________________ _ // 复制二进制字符串
__________________________________ __ _________________________________ ___________________________________ __ ___ ____________________________________ _________________________________ _____________________________________ __ ___ ___ _ // 反转字符串
______________________________________ __ _________________________ _______________________________________ _________________________________ ___ ____ // 正序与逆序一致则是回文
________________ ________________________ _
_____
_____
________________________________________ _________________________________________ ________________ <<endl _ // 输出最终计数
__________________________________________ __________________ _
_____
题目解析:二进制回文串
一、题目核心要求
给定整数 n,统计 1 到 n 范围内所有满足「二进制表示是回文数」的数字数量。
二进制回文数:
数字转换为二进制字符串后,正读和反读完全一致(例如:5 的二进制是 101,是回文数;6 的二进制是 110,不是回文数)。
数据范围:1 ≤ n ≤ 10^5,时间限制 1 秒,内存限制 128MB。
二、解题思路
核心思路分为三步,逐个检查 1~n 的每个数字:
十进制转二进制:将当前数字转换为二进制字符串(注意二进制无前导零);
判断回文:对比二进制字符串与其反转后的字符串是否一致;
统计数量:若一致则计数加 1,最终输出总计数。
三、关键细节说明
十进制转二进制的实现:
num & 1:位运算快速获取二进制最后一位(比取余 num % 2 效率更高);
binary = 字符 + binary:将每一位拼在字符串头部,保证二进制字符串的正序(例如:5 → 先取 1 → "1",再取 0 → "01",最后取 1 → "101");
num >>= 1:右移运算等价于整除 2,逐步缩小数字直到为 0。
回文判断:
利用 algorithm 库的 reverse 函数反转字符串,直接对比原字符串和反转后的字符串是否相等,简单直观。
样例验证(输入 15):1~15 的二进制回文数有:
1(1)、3(11)、5(101)、7(111)、9(1001)、15(1111),共 6 个,与样例输出一致。
五、算法效率分析
时间复杂度:O(n * log n)。遍历 1~n(O (n)),每个数字转二进制需要 log2(n) 次循环,回文判断需要 log2(n) 次字符对比,整体复杂度在 n ≤ 10^5 时完全满足时间限制。
空间复杂度:O(log n)。仅需存储单个数字的二进制字符串,空间开销极小。
总结
核心逻辑:十进制转二进制 + 回文判断,两步即可解决问题;
关键技巧:用位运算(& 1、>> 1)替代算术运算,提升二进制转换效率;
边界注意:从 1 开始遍历(0 的二进制无意义,题目要求 1~n),二进制字符串无需处理前导零。
全部评论 4
极品下划线艺术
1周前 来自 浙江
3请输入下划线
1周前 来自 河北
2_
1周前 来自 广东
2
求赞pup
1周前 来自 广东
2摩斯电码说是
3天前 来自 上海
1



















有帮助,赞一个