【题目】
一个数如果从左往右读和从右往左读数字是完全相同的,则称这个数为回文数,比如898,1221,15651都是回文数。
编写一个程序,输入两个整数min和max,然后对于min~max之间的每一个整数(包括min和max),如果它既是一个回文数又是一个质数,那么就把它打印出来。要求,回文数和质数的判断都要用函数的形式来实现。
【输入】
min max
【输出】
min和max之间所有满足要求的数。一个数占一行
【分析】
题目要求通过两个函数来实现对回文数和质数的判断,那么可以写两个bool函数来进行判断
回文数的判断
如果用int型来进行判断,那么我们最好用数组来存储每一位的数据,通过while循环来得到x的每一位数据,然后再判断是不是回文数
质数的判断
对于质数来说,它的约数只有自己本身和1,对于非质数来说,它的约束一定一个大于sqtr(x),一个小于sqrt(x),我们只需要判断数x能否被小于sqrt(x)的数整除即可
【代码】
#include<stdio.h>
#include<cmath.h>
//判断是不是回文数
bool IsPalindrome(int x) {
//用sum数组来存储x的每位数据
//因为是int型 所以10个单位就够了
int sum[10];
//size 表示x的位数
int size=1;
//读取x的每一位数据
while(x) {
sum[size]=x%10;
x/=10;
size++;
}
for(int i=1; i<=size/2; i++) {
//如果不满足回文数 直接返回false
if(sum[i]!=sum[size-i])
return false;
}
return true;
}
//判断是不是质数
bool IsPrime(int x) {
if(x<2)
return false;
for(int i=2; i<=sqrt(x); i++) {
//如果x能被i整除 那么就不是质数
if(x%i==0) {
return false;
}
}
return true;
}
int main() {
int min,max;
scanf("%d %d",&min,&max);
//遍历min-max
for(int i=min; i<=max; i++) {
//如果 既是回文数 又是质数 就输出
if(IsPalindrome(i) && IsPrime(i)) {
printf("%d\n",i);
}
}
return 0;
}