题解 | #计算日期到天数转换#

计算日期到天数转换

https://www.nowcoder.com/practice/769d45d455fe40b385ba32f97e7bcded

//简单计算:算出所有月份总天数,然后加具体日期
#include <stdlib.h>
#include <stdio.h>
int main()
{
    int month_days[12] = { 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
    int year, month, day;
    while (scanf("%d %d %d\n", &year, &month, &day) != EOF)
    {
        int days = 0;
        if (month >= 2)
            days = month_days[month - 2] + day;
        else
            days = day;
        if (((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)&&(month>2))
            days++;
        printf("%d\n", days);
    }
    return 0;
}

//稍微复杂的思路:利用大小月特点,直接通过函数进行计算,但月份只有12个,计算起来并不多,因此用上面的方法也很好
//如果换到其他计算量大的问题背景中,可以采取这个思路
#include <stdio.h>
//闰年
int Isr(int m,int d)
{
    if(m==1)
    {
        return d;
    }
    else if(m==2)
    {
        return 31+d;
    }
    else if(m%2==0&&m<10)
    {
        return (m-1)*30+m/2-1+d;
    }
    else if(m%2!=0&&m<9)
    {
        return (m-1)*31+d-m/2-1;
    }
    else if(m%2!=0&&m>8)
    {
        return (m-1)*31+d-m/2;
    }
    else
    {
        return (m-1)*31+d-m/2;
    }
}
//平年
int Isp(int m,int d)
{
    if(m==1)
    {
        return d;
    }
    else if(m==2)
    {
        return 31+d;
    }
    else if(m%2==0&&m<9)
    {
        return (m-1)*30+m/2-2+d;
    }
    else if(m%2!=0&&m<9)
    {
        return (m-1)*31+d-m/2-2;
    }
    else if(m%2!=0&&m>8)
    {
        return (m-1)*31+d-m/2-1;
    }
    else
    {
        return (m-1)*31+d-m/2-1;
    }
}
int main()
{
    int y=0,m=0,d=0;
    scanf("%d %d %d",&y,&m,&d);
    if(((y%4==0)&&(y%100!=0))||((y%100==0)&&(y%400)==0))
    {
        printf("%d\n",Isr(m,d));
    }
    else
    {
        printf("%d\n",Isp(m,d));
    }
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-21 13:41
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务