题解 | #日期差值#

日期差值

https://www.nowcoder.com/practice/ccb7383c76fc48d2bbc27a2a6319631c

#include <iostream>
using namespace std;
int GetMidYearday(int y1,int y2)
{//我们是为了算出中间空了多少年
    int num=0;
    if(y2-y1==1)
    {
        return 0;
    }
    for(int i=y1+1;i<y2;i++)
    {
        if(i%400==0||(i%4==0&&i%100!=0))
        {
            num+=366;
        }
        else {
        num+=365;
        }
    }
    return num;
}
  int GetMonthday(int year, int month) {
        int arr[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))) {
            return 29;
        }
        return arr[month];
    }
int InitDay(int year,int month,int day)
{
         int num = 0;
            num+=day;
            month--;
            while (month > 0) {
                num += GetMonthday(year, month);
                month--;
            }
           return num;
}
int FinalDay(int Init, int year)
{
    if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
    {
        return 366-Init;
    }
    else {
    return 365-Init;
    }
}
int main()//别忘了加一
{
    int a,b;
    while(scanf("%d %d",&a,&b)!=EOF)
    {
         int year1=a/10000;int year2=b/10000;
         int Midday=GetMidYearday(a/10000,b/10000);
        int Initday1 = InitDay(a / 10000, (a % 10000 - a % 100)/100, a % 100);//获得到第一天初始
        int Initday2 = InitDay(b / 10000, (b % 10000 - b % 100)/100, b % 100);
         int finalday1=FinalDay(Initday1,year1);
         int finalday2=FinalDay(Initday2,year2);
         if(year1>year2)
         {
            printf("%d",Initday1+finalday2+Midday+1);
         }
         else if(year1==year2)
         {
            if(Initday1>=Initday2)
            printf("%d",Initday1-Initday2);
            else
             printf("%d",Initday2-Initday1+1);
         }
         else {
             printf("%d",Initday2+finalday1+Midday+1);
         }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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