其他分享
首页 > 其他分享> > PAT甲级 1015 刷题记录

PAT甲级 1015 刷题记录

作者:互联网

文章目录


一、答案

#include <iostream>
#include <math.h>
using namespace std;

int judge_prime(long int num);                 //判断质数的函数
long int base_change(long int check_num,int base_system);  //十进制转换成其他进制的函数
long int base_change_reverse(long int num,int base_system);//其他进制转换为十进制的函数
long int num_reverse(long int num);             //数字翻转函数

int main()
{
    long int check_num;
    cin>>check_num;
    int is_prime=0;
    
    while(check_num>0){                   //判断输出是否结束
        int base_system=0;
        cin>>base_system;                 //输入进制
        is_prime=judge_prime(check_num);  //判断原数是否是质数
        check_num=base_change(check_num,base_system);          //将原十进制数进行进制转换
        check_num=num_reverse(check_num); //数字翻转
        check_num=base_change_reverse(check_num,base_system);  //将其他进制转换回十进制
        int is_prime_reverse;
        is_prime_reverse=judge_prime(check_num);               //进行质数判断
        if(is_prime==1 && is_prime_reverse==1){                //输出结果
            cout<<"Yes"<<endl;
        }else{
            cout<<"No"<<endl;
        }
        cin>>check_num;
    }
}

int judge_prime(long int num)       //质数判断函数
{
    int prime_tag=1;
    if(num==1){
        prime_tag=0;
    }
    for(int i=2;i<=pow(num,0.5);i++){
        if(num%i==0){
            prime_tag=0;
        }
    }
    return prime_tag;
}

long int base_change(long int check_num,int base_system)    //十进制进制转换其他进制(原理可自行百度进制转换)
{
    long int result=0;
    int round=0;
    while(check_num!=0){
        result=pow(10,round)*(check_num%base_system)+result;
        check_num=check_num/base_system;
        round++;
    }
    return result;
}

long int base_change_reverse(long int num,int base_system)  //其他进制转换成十进制
{
    long int result=0;
    int round=0;
    while(num!=0){
        result=result+num%10*pow(base_system,round);
        num=num/10;
        round++;
    }
    return result;
}

long int num_reverse(long int num)     //数字翻转
{
    long int result=0;
    while(num!=0){
        result=result*10+num%10;
        num=num/10;
    }
    return result;
}

二、坑点

本题题目很简单,但是坑点有点多:

1. 质数判断时,要注意1不是质数,2是质数。

2.注意题目中 "A reversible prime in any number system is a prime whose “reverse” in that number system is also a prime.” 中的 also 。不单是变换后的数要是质数,而且原始的数也要是质数。

3. 如果使用 int 类型的变量来存储中间数字转换的结果,像9999的二进制表示这些数就会因为超出表示范围出现错误,所以需要在代码中合理使用long int 。

      最后,萌新写文,如有不足,还望指正

标签:prime,PAT,int,long,num,base,1015,check,刷题
来源: https://blog.csdn.net/qq_31795233/article/details/122774780