![](https://i-blog.csdnimg.cn/blog_migrate/b777579cc0f47dad19cbfb2f2fd8d738.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b932c6f9925e7b71ee24092beb0f989b.png)
输入样例
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
这道题呢,我是先看的样例,再看的题目。
思路比较简单,难的点在于怎么去实现。
思路:首先题目给我的month是一个英文的缩写,这肯定需要开一个字符串取存放,然后去判断,把它化成数字。接着,我需要去把它们组合起来,然后转化为字符串。最后进行判断,看它是否是对称的。
实现的话,我这次大部分都是用的函数实现的,以前对函数不太了解,所以在实现的过程中一直在查找资料。函数用起来真的挺爽的,真的方便,所以我又去找了一些比较常见的函数
以及这次用到的itoa函数的头文件也是stdlib.h(我利用itoa函数实现的整型转化为字符串)
代码如下
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int compare(char m[])
{
int c;
if(strcmp(m,"Jan")==0)
c=1;
else if(strcmp(m,"Feb")==0)
c=2;
else if(strcmp(m,"Mar")==0)
c=3;
else if(strcmp(m,"Apr")==0)
c=4;
else if(strcmp(m,"May")==0)
c=5;
else if(strcmp(m,"Jun")==0)
c=6;
else if(strcmp(m,"Jul")==0)
c=7;
else if(strcmp(m,"Aug")==0)
c=8;
else if(strcmp(m,"Sep")==0)
c=9;
else if(strcmp(m,"Oct")==0)
c=10;
else if(strcmp(m,"Nov")==0)
c=11;
else
c=12;
return c;
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int day,year,m,c;
char month[25]={0},r[9]={0};
scanf("%s%d,%d",month,&day,&year);//注意字符串的输入输出!!
m=compare(month);
c=year*10000+m*100+day*1;
itoa(c,r,10);//整型转化为字符串
char ans[10]={0};//注意要给它初始化
if(year<1000) //当year不足四位数时
{
int t=strlen(r);
for(int i=0;i<8-t;i++)
strcat(ans,"0");//在前面添0补够8个...注意,直接不可把0加在r前面,即不能写成(“0”,r)
}
strcat(ans,r);//特别注意,strcat函数指的是把字符串r连接在ans的前面,最后变成一个新的ans字符串
int t,o=0;//此处t并不重要,所以没有初始化了
for(int i=0;i<4;i++)//前与后进行对比,只需要遍历一半就好
{
if(ans[i]==ans[8-1-i])
t++;
else
o++;
}
if(o!=0)
printf("N ");
else
printf("Y ");
printf("%s\n",ans);
}
}
这里提醒一下自己,
关于字符串的定义输出输入还能搞错了,得去多瞅瞅了。