ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PAT甲级 1015 刷题记录

2022-02-03 11:59:07  阅读:153  来源: 互联网

标签:prime PAT int long num base 1015 check 刷题


文章目录


一、答案

#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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有