很早之前就做过这个题,不过是按照下面的方法①做的,没有学习并且深度剖析出双指针的知识点,偶然遇到重新做了一遍
题目来源:
B3882 信息与未来 2015 求回文数 - 洛谷
https://www.luogu.com.cn/problem/B3882
解析方法:
①把函数里面的整数的每一位都拆进数组里面,逆序并且乘10输出和原数比较大小
②将函数里面的整数转换成字符串,使用双指针一个从前往后,一个从后往前的遍历,比较,看看是不是左指针和右指针每次指向的元素大小都一样
可执行代码:
cpp
//把函数里面的整数的每一位都拆进数组里面,逆序并且乘10输出和原数比较大小
#include<bits/stdc++.h>
using namespace std;
int n,ans=9;
bool shi(int p){
int ret=0,q=p;
vector<int> a;
while(q){
a.push_back(q%10);
q/=10;
}
for(vector<int>::iterator it=a.begin();it!=a.end();it++){
ret=ret*10+(*it);
}
if(ret==p) return true;
else return false;
}
int main(){
cin>>n;
for(int i=11;i<=n;i++){
if(shi(i)) ans++;
}
cout<<ans;
return 0;
}
//将函数里面的整数转换成字符串,使用双指针一个从前往后,一个从后往前的遍历,比较,看看是不是左指针和右指针每次指向的元素大小都一样
#include<bits/stdc++.h>
using namespace std;
int n,ans=9;
bool shi(int p){
string st=to_string(p);
int l=0,r=st.size()-1;
while(l<r){
if(st[l]==st[r]){
l++;
r--;
}else break;
}
if(l>=r) return true;
else return false;
}
int main(){
cin>>n;
for(int i=11;i<=n;i++){
if(shi(i)) ans++;
}
cout<<ans;
return 0;
}