(PAT Basic Level)1114 全素日

这题我用的是C语言,如果用C++的话应该更快一点。

以上图片来自新浪微博,展示了一个非常酷的“全素日”:2019年5月23日。即不仅20190523本身是个素数,它的任何以末尾数字3结尾的子串都是素数。

本题就请你写个程序判断一个给定日期是否是“全素日”。

输入格式:

输入按照 yyyymmdd 的格式给出一个日期。题目保证日期在0001年1月1日到9999年12月31日之间。

输出格式:

从原始日期开始,按照子串长度递减的顺序,每行首先输出一个子串和一个空格,然后输出 Yes,如果该子串对应的数字是一个素数,否则输出 No。如果这个日期是一个全素日,则在最后一行输出 All Prime!

输入样例 1:

20190523

输出样例 1:

20190523 Yes
0190523 Yes
190523 Yes
90523 Yes
0523 Yes
523 Yes
23 Yes
3 Yes
All Prime!

输入样例 2:

20191231

输出样例 2:

20191231 Yes
0191231 Yes
191231 Yes
91231 No
1231 Yes
231 No
31 Yes
1 No

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

代码如下:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>
#define true 1
#define false 0
bool is_prime(int number){
//也可以改为int is_prime(int number),后面是return 1或return 0,不需要true/false。
    if(number==1) return false;
    else if(number==2) return true;
    else{
        for (int i=2; i<=sqrt(number); i++) 
                if(!(number%i)) return false;
    return true;
    }
}
int main(){
    char date[9];
    gets(date);
    int i,j,k;
    int count=0;//计数
    char temp[9];
    strcpy(temp,date);
    //puts(temp);调试时检验用
    int sum=0,len=strlen(temp);
    for(i=0;i<8;i++){//先输出八行
        sum=0;
        if(i==0){//第一行
            printf("%s",date);
            for(j=0;j<8;j++){
                sum=sum*10+date[j]-'0';//注意这里字符串转换为整数需要-'0'
            }
            if(is_prime(sum)){
                printf(" Yes\n");
                count++;
            }else{
                printf(" No\n");
            }
        }else{//第二行开始
            for(j=0;j<len-1;j++){//每次将数左移一位
                temp[j]=temp[j+1];
            }
            temp[j]='\0';//每次数左移之后将原末位值置空
            printf("%s",temp);
            len--;
            sum=0;
            for(k=0;k<len;k++){
                sum=sum*10+temp[k]-'0';//注意这里字符串转换为整数需要-'0'
            }
            /printf(" %d",sum);调试时检验sum值是否正确用
            if(is_prime(sum)){
                printf(" Yes\n");
                count++;
            }else{
                printf(" No\n");
            }
        }
    }
    if(count==8) printf("All Prime!\n");
    return 0;
}

 提交结果:

猜你喜欢

转载自blog.csdn.net/gaogao0305/article/details/130365531