OJ刷题之旅(4)

简介: OJ刷题之旅(4)

题目描述


求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_primeis_palindrome 来判断一个数字是否是素数和是否是回文数。


1.函数 is_prime 判断一个数字是否是素数,返回值为 1 表示是素数,返回值为 0 表示不是素数。

2.函数 is_palindrome 判断一个数字是否是回文数,返回值为 1 表示是回文数,返回值为 0 表示不是回文数。


main 函数中,我们先读入输入的整数 n。然后使用循环遍历 11 到 n 之间的每个数字,对于每个数字,如果它既是素数又是回文数,就将计数器 count 加 1。最后输出 count 的值即可。

相关文章
|
6月前
刷题之Leetcode844题(超级详细)
刷题之Leetcode844题(超级详细)
35 0
|
6月前
|
索引
leetcode142刷题打卡
leetcode142刷题打卡
33 0
|
6月前
|
索引
leetcode151刷题打卡
leetcode151刷题打卡
32 0
|
人工智能 算法 C++
|
算法 网络架构