央视新闻发了一条微博,指出 2020 年有个罕见的“对称日”,即 2020 年 2 月 2 日,按照 年年年年月月日日
格式组成的字符串 20200202 是完全对称的。
给定任意一个日期,本题就请你写程序判断一下,这是不是一个对称日?
输入格式:
输入首先在第一行给出正整数 N(1<N≤10)。随后 N 行,每行给出一个日期,却是按英文习惯的格式:Month Day, Year
。其中 Month
是月份的缩写,对应如下:
- 一月:Jan
- 二月:Feb
- 三月:Mar
- 四月:Apr
- 五月:May
- 六月:Jun
- 七月:Jul
- 八月:Aug
- 九月:Sep
- 十月:Oct
- 十一月:Nov
- 十二月:Dec
Day
是月份中的日期,为 [1, 31] 区间内的整数;Year
是年份,为 [1, 9999] 区间内的整数。
输出格式:
对每一个给定的日期,在一行中先输出 Y
如果这是一个对称日,否则输出 N
;随后空一格,输出日期对应的 年年年年月月日日
格式组成的字符串。
输入样例:
5
Feb 2, 2020
Mar 7, 2020
Oct 10, 101
Nov 21, 1211
Dec 29, 1229
输出样例:
Y 20200202
N 20200307
Y 01011010
Y 12111121
N 12291229
#include<stdio.h>
#include<string.h>
int main(){
char str[12][10]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
//用数组来存储月份,以便于和输入的月份对应
int n;
int year,day,month=0;//year,day分别是输入的年,日
scanf("%d",&n);
for(int i=0;i<n;i++){
char yue[10];//输入的月份
scanf("%s %d, %d",yue,&day,&year);
for(int j=0;j<12;j++){
if(strcmp(str[j], yue) == 0){//注意这里不能用==来比较,因为字符串的==是比较地址
month=j+1;
break;//遍历str数组,找到月份对应的数字
}
}
char b[8];
int tag=1;
int res=year*10000+month*100+day;//将结果转化成整形,存储在res中
sprintf(b,"%.8d",res);//将res的数字以字符串的形式复制到数组b中
//注意一定要在%d前面加.8或者08,这样可以保证不足8位的前面是0
for(int i=0;i<4;i++){
if(b[i]!=b[7-i]){
tag=0;
break;
}
}//判断是否回文
if(tag==1){
printf("Y %.8d\n",res);
}
else{
printf("N %.8d\n",res);
}
}
return 0;
}