PAT-1111-对称日

输入样例

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是一个英文的缩写,这肯定需要开一个字符串取存放,然后去判断,把它化成数字。接着,我需要去把它们组合起来,然后转化为字符串。最后进行判断,看它是否是对称的。

实现的话,我这次大部分都是用的函数实现的,以前对函数不太了解,所以在实现的过程中一直在查找资料。函数用起来真的挺爽的,真的方便,所以我又去找了一些比较常见的函数

http://t.csdn.cn/MHo7S

http://t.csdn.cn/sy13K

以及这次用到的itoa函数的头文件也是stdlib.h(我利用itoa函数实现的整型转化为字符串

http://t.csdn.cn/enBaz

代码如下

#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);
    }
 }

这里提醒一下自己,

关于字符串的定义输出输入还能搞错了,得去多瞅瞅了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值