首先是如何判断回文数, 回文数从前面看和从后面看都是一样的,判断的方法就是把这个数换成字符型, 使用sprint(s, "%d", n)(s是字符数组),然后计算这个数的个数, 使用strlen函数,(记得要#include<string.h>), 然后循环一半,观察字符是否相等;然后判断素数,就将数从2循环到sqrt(n)即可,判断是否可以除去。
具体代码
//判断是否是素数
//判断是否是回文数
//寻找回文质数
//带入数值
#include<stdio.h>
#include<math.h>
#include<stdbool.h>
#include<string.h>
//判断是否是素数
bool is_prime(long int n)
{
long int i;
for (i = 2; i < sqrt(n); i ++)
if (n % i == 0) return false;
return true;
}
bool is_pal(long int n)
{
char a[20];
long int i;
sprintf(a, "%ld", n);
long int num = strlen(a);
for (i = 0; i < num / 2; i ++)
{if (a[i] != a[num - i -1]) return false;}
return true;
}
void print_prime_pal(long int a, long b)
{
long i, j;
for (i = a; i <= b; i ++)
if (is_prime(i) && is_pal(i)) printf("%ld\n", i);
}
int main()
{
long a, b;
scanf("%ld%ld", &a, &b);
print_prime_pal(a, b);
return 0;
}
当然, 回文数的判定中也不把它当成字符,以整数来运算
即:
do{
int a[20], flag = 0;
a[flag ++] = n % 10
n = n / 10;}while(n > 0);