题目如下:
回文素数
所谓回文素数是指对一个素数n,从左到右和从右到左读是相同的,这样的数就称为回文素数,例如11,101,313等。编程计算并输出不超过n(100<=n<=1000)的回文素数,并统计这些回文素数的个数,其中n的值从键盘输入。
程序运行示例1
Input n:
100↙
11
count=1
程序运行示例2
Input n:
1000↙
11 101 131 151 181 191 313 353 373 383 727 757 787 797 919 929
count=16
输入格式:"%d"
输出格式:
输入提示信息:"Input n:n"
输出格式:"%4d"
"ncount=%dn"
代码如下:
#includeint find(int n);//用来寻找素数 int check(int n);//用来判断是否是回文素数 int main() { int n,temp,flag=0,count=0;//初始化变量 printf("Input n:n"); scanf("%d",&n); for(int i=2;i<=n;i++) { flag=0; temp=find(i);//将找到的素数暂时赋值给temp变量 flag=check(temp);//将temp变量放入check函数中进行检测,如果是回文数就输出1;不是就输出0 if(flag)//输出语句 { count++; printf("%4d",temp); } } printf("ncount=%dn",count); } int find(int n) { int flag;//定义旗帜,方便寻找素数 for(int i=2;i<=n/2;i++) { flag=1; if(n%i==0) { flag=0;//如果n能被整除,让flag=0,来表示他不是素数,然后跳出循环 break; } } if(flag) { return n; } else return 0; } int check(int n) { if(n==0||n/10==0)//排除是0和个位数的干扰,因为个位数没有回文数。 { return 0; } int sum=0,temp=n; while(n>0)//判断是否是回文数。 { sum=sum*10+n%10; n/=10; } if(temp==sum)//如果反转后的数字和没有反转的数字想等,则是回文数 { return 1; } else return 0;//不是回文数就输出0 }
运行结果如下:
欢迎评论区交流



