一道很基础的题-回文素数
【问题描述】
如果一个数从左边读和从右边读都是同一个数,就称为回文数。
例如6886就是一个回文数,从给出的数据中统计出既是回文数又是素数的数。
【输入】
输入一个整数n,下面一行有n个正整数a;
【输出】
输出为一个数,统计满足条件数的个数。
【输入样例】
7
7 12 10 11 121 1331 10301
【输出样例】
3
【数据规模】
对于全部的数据1 <= n <= 1000, 0 <= a <= 1e10;
//通过一道回文素数学到了一个c++11的函数,to_string();
#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
#define N 1010
using namespace std;
bool is_huiwen(long long num)
{
//我们把读今来的num(整型变量),通过to_string转换成一个字符串并用str1保存该字符串;
string str1 = to_string(num);
//因为我们下面要判断str1反转前和反转后是否为同一个字符串,用str2保存一下反转前的str1
string str2 = str1;
//反转字符串str1
reverse(str1.begin(), str1.end());
//进行判断,如果反转之前的str1和反转后的str1相同,那么说明num是一个回文数
if(str1 == str2) return true;
return false;
}
bool is_prime(long long num)
{
if(num == 0 || num == 1) return false; //0和1不是质数,下面的循环判断无法覆盖到
for(int i = 2; i <= sqrt(num); i++){ //平淡的判断质数
if(num % i == 0) return false;
}
return true;
}
int main()
{
int num;
int count = 0;
long long arr[N];
cin >> num;
for(int i = 0; i < num; i++) cin >> arr[i];
//遍历整个arr[i]如果既是回文数又是质数,那么说明arr[i]是一个回文素数;
for(int i = 0; i < num; i++) if(is_huiwen(arr[i]) && is_prime(arr[i])) count++;
cout << count;
return 0;
}
细节细节