题目描述
求11到n之间(包括n),既是素数又是回文数的整数有多少个。
输入
一个大于11小于1000的整数n。
输出
11到n之间的素数回文数个数。
样例
输入 23
输出 1
提示 回文数指左右对称的数,如:292,333。 来源/分类 循环结构
题解
#include <stdio.h> int is_prime(int num) { int i; if (num == 2 || num == 3) { return 1; } if (num == 1 || num % 2 == 0) { return 0; } for (i = 3; i * i <= num; i += 2) { if (num % i == 0) { return 0; } } return 1; } int is_palindrome(int num) { int rev = 0, tmp = num; while (tmp != 0) { rev = rev * 10 + tmp % 10; tmp /= 10; } return num == rev; } int main() { int n, count = 0, i; scanf("%d", &n); for (i = 11; i <= n; i++) { if (is_prime(i) && is_palindrome(i)) { count++; } } printf("%d\n", count); return 0; }
这个题目要求找到11到n之间(包括n)既是素数又是回文数的整数个数。我们可以先写两个函数 is_prime
和 is_palindrome
来判断一个数字是否是素数和是否是回文数。
1.函数 is_prime
判断一个数字是否是素数,返回值为 1 表示是素数,返回值为 0 表示不是素数。
2.函数 is_palindrome
判断一个数字是否是回文数,返回值为 1 表示是回文数,返回值为 0 表示不是回文数。
在 main
函数中,我们先读入输入的整数 n
。然后使用循环遍历 11 到 n 之间的每个数字,对于每个数字,如果它既是素数又是回文数,就将计数器 count
加 1。最后输出 count
的值即可。