前置知识:

  1. to_string() 函数

  2. 将 Dev-C++ 改为 c++14

思路:

为什么要改为 c++14 呢?因为 to_string() 这个函数到 c++14 才有,而 DEV 默认是 c++11。

我们枚举这个区间,将其中的每个数用 to_string() 变为字符串,这样就可以枚举它的每一位,方便判断。

若字符串的长度为 $s$,则枚举位数的循环只需循环 $\left \lfloor \frac{s}{2} \right \rfloor$ 次即可。

若此字符串为 $w$,则 $wi$ 对应的为 $w{s-i-1}$。

按照这个将相等的组数记下来,如果它是回文数的话,那么相等的组数应为 $\left \lfloor \frac{s}{2} \right \rfloor$。

判断一下即可。

注意:

数据范围为 $1 \le S \le E \le 10^{18},E-S+1\le 10^5$,需要开 long long。

AC 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<bits/stdc++.h>
using namespace std;
long long s,e,c;
string ss;
int main(){
cin>>s>>e;
for(long long i=s;i<=e;i++){
ss.clear();
c=0;
ss=to_string(i);
for(int i=0;i<ss.size()/2;i++){
if(ss[i]==ss[ss.size()-i-1]){
c++;
}
}
if(c==ss.size()/2){
cout<<"Palindrome!"<<endl;
}
else cout<<i<<endl;
}
return 0;
}