PAT(乙级)2020年春季考试 7-4 全素日 (20分)
7-4 全素日 (20分)
以上图片来自新浪微博,展示了一个非常酷的“全素日”: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
代码讲解:此题是利用sscanf 将我们的输入的字符串变换为整形,然后利用
自己的素数判断函数去判断,是否为素数就可以。。。
1 #include<stdio.h> 2 #include<string.h> 3 int prime(int n) 4 { 5 if(n<2) 6 return 0; 7 int i; 8 for(i=2;i*i<=n;i++) 9 { 10 if(n%i==0) 11 return 0; 12 13 } 14 return 1; 15 } 16 int main() 17 { 18 char a[20]; 19 scanf("%s",a); 20 int date,i,flag=1;; 21 for(i=0;i<strlen(a);i++) 22 { 23 sscanf(a+i,"%d",&date); 24 if(prime(date)) 25 printf("%s Yes\n",a+i); 26 else 27 { 28 printf("%s No\n",a+i); 29 flag=0; 30 } 31 } 32 if(flag) 33 printf("All Prime!\n"); 34 return 0; 35 }