用C++实现下面问题: 描述 一个数如果从左往右读和从右往左读数字是相同的,则称这个数是回文数,如121,1221,15651都是回文数。给定位数n,找出所有既是回文数又是素数的n位十进制数。(注:不考虑超过整型数范围的情况)。 输入 位数n,其中1<=n<=9。 输出 第一行输出满足条件的素数个数。 第二行按照从小到大的顺序输出所有满足条件的素数,两个数之间用一个空格区分。 样例输入 1 样例输出 4 2 3 5 7
时间: 2024-04-14 12:29:52 浏览: 12
下面是使用C++实现的解决方案:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
// 判断一个数是否为素数
bool isPrime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
// 判断一个数是否为回文数
bool isPalindrome(int num) {
int reverseNum = 0;
int originalNum = num;
while (num > 0) {
reverseNum = reverseNum * 10 + num % 10;
num /= 10;
}
return originalNum == reverseNum;
}
int main() {
int n;
cin >> n;
int count = 0;
cout << "满足条件的素数:";
for (int i = pow(10, n-1); i < pow(10, n); i++) {
if (isPrime(i) && isPalindrome(i)) {
cout << i << " ";
count++;
}
}
cout << endl;
cout << "满足条件的素数个数:" << count << endl;
return 0;
}
```
这段代码首先定义了两个函数 `isPrime` 和 `isPalindrome`,分别用于判断一个数是否为素数和是否为回文数。
然后在 `main` 函数中,首先读取输入的位数 `n`,然后通过循环遍历从 `pow(10, n-1)` 到 `pow(10, n)` 的所有数。
对于每个数,判断它是否既是素数又是回文数。如果满足条件,则输出这个数,并将满足条件的素数个数加一。
最后输出满足条件的素数个数和所有满足条件的素数。