竞赛
考级
N - 8进制回文数 题目分析 递归处理得 888 进制中的每一位,用双指针判断是否为回文串即可。 AC代码
AC君
d
双面人(生活,就是一场豪赌)
思路:本题就是让我们判断整数N在八进制下是否回文。那么我们就可以手搓两个函数。一个是进制转化的,另一个是判断回文串(数)的。先进行进制转换,之后存入字符串中判断即可。 代码(1): 方法二:什么,你说题目上写了双指针?我就不用 那我用一下。其实就是在判断回文串的时候改一改代码就行了 代码(双指针): 其实就是把for改成while 时间复杂度分析: 进制转换的复杂度为O(LOGN)O(\LOG{N})O(LOGN),判断回文串的时间复杂度(第一种和第二种)分别为O((N)8.LEN)O((N)_8.LEN)O((N)8 .LEN)和O((N)8.LEN/2)O((N)_8.LEN/2)O((N)8 .LEN/2)。第一种方法是可以优化的。我就不这里就不优化了。 那么总体时间复杂度为O(LOGN+(N)8.LEN)O(\LOG{N}+(N)_8.LEN)O(LOGN+(N)8 .LEN)。其中(N)8.LEN(N)_8.LEN(N)8 .LEN是八进制下N的长度。
Stars_Seeker
我的思路是先把N转换成八进制存进一个数组(我这里是逆序存储,不过不影响结果)然后就比较就行了, 大佬顺便帮我看看顺序存的话是改递归还是什么的,代码如下 ···#include<iostream> #include<vector> using namespace std; int main() { auto N{0}; cin>>N; vector<int> v; while(N>=8){ int n=N%8; v.push_back(n); N/=8; } v.push_back(N); //把首位也存进去 auto left=v.begin(),right=v.end()-1; auto flag{1}; //假设YES while(left<right){ if(*left!=*right){ flag=0; //更改YES并跳出循环 break; } left++;right--; } cout<<(flag?"YES":"NO")<<endl; return 0; }
北北
#include<bits/stdc++.h> using namespace std; string s; void len_fn(int x) { if(x==0) return; len_fn(x/8); s+=char(x%8+'0'); } main() { int x; cin>>x; len_fn(x); int len=s.size(); int i=0; for(;i<=len/2;i++) { if(s[i]!=s[len-i-1]) break; } if(i>len/2) cout<<"YES"; else cout<<"NO"; return 0; }
鬼影之魂
思路: 因为题目说判断八进制下的数是否为回文数,所以可以利用stringstream把它转换成八进制字符串(进行备份),然后利用<algorithm>中的reverse()函数将它逆序再判断两字符串相等。 代码:
沈思邈
飞的智动
THUNDER
zsy
无敌的鳖佬仔给老爷爷猜猜被
136****4819
> 点点我吧 代码:
entj
毛奕程
༺ཌༀ🐏ༀད༻
李伙子ia
提交答案之后,这里将显示提交结果~