此题为基础题拼凑在一起的,我的思路是先检查是不是回文数再检查是不是素数,使用递归的方式不断检索出符合题意的数。代码如下所示
class Solution {
public:
int primePalindrome(int n) {
int count=0;
int num = n;
int high,low;
int p,q;
int flag = 0;
/*判断是否为回文数*/
if(n<10) flag = 1;
else{
do{
num = num / 10;
count++;
}while(num!=0);
}
for(int i=0; i<int(count/2); i++){
high = pow(10,count-1-i);
p = n / high % 10;
low = pow(10,i);
q = n / low % 10;
if(p != q){
flag = 0;
break;
}
else{
flag = 1;
}
}
if(flag){
/*判断是否为素数*/
if(n==1 || n==2) return 2;
for(int i=2; i<n; i++){
if(n%i == 0) break;
if(i==n-1) return n;
}
}
return primePalindrome(n+1);
}
};
问题在于会超时,看评论区速度快的太无赖了,直接把范围内所有满足条件的数构成数组,再用二分检索。