weixin_75151975 2022-11-25 22:04 采纳率: 89.4%
浏览 53
已结题

求这个问题的完整代码

【描述】众所周知,日期有两种表示方法:MM/DD/YY或者YY/MM/DD.我们假设本题讨论的年份的格式都是20YY。

给你一个字符串,如果它只能代表一个合法的日期,满足MM/DD/YY的格式或者是YY/MM/DD的格式,那么输出 “month date,year”的格式(见第二个样例),否则输出在这两种表示法下的日期差(见第一个样例)。

提示1:一年有12个月,分别是January, February, March, April, May, June, July, August, September, October, November 和 December。

提示2:注意闰年2月份有29天。闰年需要满足以下两个条件之一:

年份是400的倍数。
年份是4的倍数但年份不是100的倍数。
【输入】
一个时间字符串,格式为AA/BB/CC。保证AA/BB/CC至少满足两种表示法其中之一。

【输出】
见描述。

样例
输入

02/07/19
19/02/07
输出

6047
February 7, 2019
提示
样例1:02/07/19可能是2019.2.7(采用MM/DD/YY表示法)或者是2002.7.19(采用YY/MM/DD表示法)。这两个日期相差6047天。

样例2:19/02/07只能是2019.2.7(YY/MM/DD表示法)。也就是只能代表这一个日期,按照要求输出即可。

  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2022-11-25 22:51
    关注
    #include <stdio.h>
    #include <math.h>
    char month[12][20] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November" ,"December"};
    int m_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    
    int isleap(int year)
    {
        if(year %400 == 0 || (year % 4== 0 && year %100 !=0))
            return 1;
        return 0;
    }
    
    int getdays(int year,int month,int day)
    {
        int days = 0;
        for(int i=0;i<year;i++)
            if(isleap(i+2000))
                days += 366;
            else
                days += 365;
        for(int i=0;i<month-1;i++)
            days += m_days[i];
        if(month > 2 && isleap(year))
            days++;
        days += day;
        return days;
    }
    
    int isVal(int m,int d,int y)
    {
        if(m>12 || m<1)
            return 0;
        if(d>31 || d<1)
            return 0;
        if(m==2 && d==29 && !isleap(y+2000))
            return 0;
        return 1;
    }
    
    int main()
    {
        int a,b,c;
        scanf("%d/%d/%d",&a,&b,&c);
        if(isVal(a,b,c) && isVal(b,c,a))  //如果满足两种格式,输出时间差
            printf("%d",abs(getdays(a,b,c) - getdays(c,a,b)));
        else if(isVal(a,b,c))
            printf("%s %d,%d",month[a-1],b,c+2000);
        else
            printf("%s %d,%d",month[b-1],c,a+2000);
        return 0;
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月4日
  • 已采纳回答 11月26日
  • 创建了问题 11月25日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器