洛谷 - B4276 [蓝桥杯青少年组国赛 2023] 八进制回文平方数 - 题解

题目传送门

主要思路

首先,这道题范围在 \(10^9\),我们不可能直接从 \(1\) 循环到 \(N\)。我们不难看出,这道题是求平方数的八进制是否回文,那些不是平方数的例如 \(2\) 呀,\(3\) 呀这些都是不用考虑的。我们循环也只用从 \(1\) 到 \(\left\lfloor\sqrt{n}\right\rfloor\) 就可以了。这样,时间复杂度就大大降低了。其余部分就没什么好说的了,详见代码。

AC 代码:

cpp 复制代码
#include<iostream>
using namespace std;
string l0z8(int n){
    string s;
    while(n){
        s=char(n%8+48)+s;
        n/=8;
    }
    return s;
}
bool isHw(int n){
    string s=l0z8(n);
    int l=0,r=s.size()-1;
    while(l<=r){
        if(s[l]!=s[r])return 0;
        l++,r--;
    }
    return 1;
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i*i<=n;i++){
        if(isHw(i*i)){
            cout<<i*i<<' ';
        }
    }
    return 0;
}

代码时间复杂度:\(\mathcal O\left(4\times\log_88\times\left\lfloor\sqrt{n}\right\rfloor\right)\)

相关推荐
xiaoye-duck1 天前
《算法题讲解指南:优选算法-字符串》--61.最长公共前缀,62.最长回文子串,63.二进制求和,64.字符串相乘
c++·算法·字符串
itman3013 天前
C语言字符串必知:末尾有个隐藏的\0,新手易踩坑
c语言·字符串·内存管理·库函数·指针操作
汉克老师4 天前
GESP2024年12月认证C++三级( 第一部分选择题(9-15))
c++·字符串·位运算·进制·补码·gesp三级·gesp3级
汉克老师4 天前
GESP2024年12月认证C++三级( 第一部分选择题(1-8))
c++·字符串·二进制·八进制·补码·gesp三级·gesp3级
王老师青少年编程5 天前
csp信奥赛c++之字符数组与字符串的区别
c++·字符串·字符数组·csp·信奥赛
Tisfy7 天前
LeetCode 3474.字典序最小的生成字符串:暴力填充
算法·leetcode·字符串·题解
汉克老师8 天前
GESP2025年6月认证C++三级( 第一部分选择题(9-15))
c++·字符串·位运算·gesp三级·gesp3级
Tisfy10 天前
LeetCode 2839.判断通过操作能否让字符串相等 I:if-else(两两判断)
算法·leetcode·字符串·题解
Thomas.Sir12 天前
第三章:Python3 之 字符串
开发语言·python·字符串·string
Hknll16 天前
CSP第33次认证题解
数据结构·c++·算法·stl·字符串·csp认证·vector/array