【每天一道PAT】 1015 Reversible Primes

思路

判断原数和“取反”后数是否为素数
1.用vector存储“取反”时用到的数字

#include <cstdio>
#include <cmath>
#include <vector>
using namespace std;
bool is_prime(int n) {
    if(n <= 1) return false;
    int sqr = int(sqrt(n * 1.0));
    for(int i = 2; i <= sqr; i++) {
        if(n % i == 0)
            return false;
    }
    return true;
}
//取反,注意基数
int reverse(int n,int r)
{
    vector<int> num;
    int result = 0;
    do {
        num.push_back(n%r);
        n /= r;
    }while (n != 0);
    for (int i = num.size()-1; i >= 0 ; --i) {
        result += num[num.size()-i-1]*pow(r,i);//回文后算出新的数进行比较
    }
    return result;
}
int main()
{
    int N,D;//原数,基数
    while(scanf("%d %d",&N,&D) ,N>0)
    {
        if(is_prime(N)&&is_prime(reverse(N,D))) printf("Yes
");
        else printf("No
");
    }
}

解法二

#include <cstdio>
#include <cmath>
#include <vector>
using namespace std;
vector<int> num;
bool reverse(int n,int r)
{
    int result = 0;
    do {
        num.push_back(n%r);
        n /= r;
    }while (n != 0);
      //判断是否回文
    for (int i = 0; i < num.size()/2 ; ++i) {
        if(num[i] != num[num.size()-1-i]) return false;
    }
    return true;
}
int main()
{
    int N,b;
    scanf("%d %d",&N,&b);
    if(reverse(N,b)) printf("Yes
");
    else  printf("No
");
    for (int i = num.size()-1; i >=0; --i)
    {
        printf("%d",num[i]);
        if(i != 0) printf(" ");
    }
}
原文地址:https://www.cnblogs.com/xinyuLee404/p/12690103.html