描述一个数如果从左往右读和从右往左读数字是相同的,则称这个数是回文数,如121,1221,15651都是回文数。给定位数n,找出所有既是回文数又是素数的n位十进制数。(注:不考虑超过整型数范围的情况)。输入位数n,其中1<=n<=9。输出第一行输出满足条件的素数个数。
第二行按照从小到大的顺序输出所有满足条件的素数,两个数之间用一个空格区分。样例输入
1
样例输出
4 2 3 5 7
算的比较巧,肯定有其它更加直接的方法
1 #include<bits/stdc++.h> 2 using namespace std; 3 char a[13]; 4 int b[7000],n1,top; 5 bool ss(int n) 6 { 7 if(n==1||n==0) return 0; 8 if(n==2) return 1; 9 for(int i=2;i<=sqrt(n);i++) 10 if(n%i==0) return 0; 11 return 1; 12 } 13 void f(int n) 14 { 15 if(!n) 16 { 17 if(ss(atoi(a))) b[top++]=atoi(a); 18 return; 19 } 20 int i,s=0; 21 if(n==n1) s=1; 22 for(i=s;i<=9;i++) 23 { 24 25 a[n1-n]=i+‘0‘; 26 a[n-1]=i+‘0‘; 27 f(n-1); 28 } 29 return; 30 } 31 int main() 32 { 33 int k,m; 34 scanf("%d",&k); 35 n1=k; 36 if(k%2==0) m=k/2; else m=k/2+1; 37 f(m); 38 sort(b,b+top); 39 printf("%d",top); 40 if(top) printf("\n"); 41 for(int i=0;i<top;i++) 42 printf("%d ",b[i]); 43 return 0; 44 }
原文:http://www.cnblogs.com/zby-ccsygz/p/6275120.html