题解 | #日期差值#

日期差值

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

#include <iostream>
using namespace std;
void Swap(int& year1, int& year2, int& month1, int& month2, int& day1,
          int& day2) {
    int tyaer = year1;
    year1 = year2;
    year2 = tyaer;

    int tday = day1;
    day1 = day2;
    day2 = tday;

    int tmonth = month1;
    month1  = month2;
    month2 = tmonth;
}
int main() {
    int day1, day2, ans = 0, Month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    cin >> day1 >> day2;
    int year1 = day1 / 10000;
    int year2 = day2 / 10000;
    int month1 = (day1 % 10000) / 100;
    int month2 = (day2 % 10000) / 100;
    day1 = (day1 % 100);
    day2 = (day2 % 100);
    if (year2 > year1) //确保year1 > year2
    {
        Swap(year1, year2, month1, month2, day1, day2);
    } 
    else if (year1 == year2) 
    {
        if (month2 > month1) 
        {
            Swap(year1, year2, month1, month2, day1, day2);
        } 
        else if (month1 == month2) 
        {
            if (day2 > day1) 
            {
                Swap(year1, year2, month1, month2, day1, day2);
            }
        }
    }

    //开始计算天数
    if (year1 == year2) 
    {
        if (month1 > month2) 
        {
            ans+=(Month[month1]-day1+1);
            for(int i = 0;i<((month1 - month2)-1);i++)
            {
                ans+=Month[month1+i+1];
            }
            ans+=day2;
            if(month1<=2&&(year1 % 4 == 0 && (year1 % 100 != 0 || year1 % 400 == 0)))
            {
                ++ans;
            }
            cout<<ans;
            exit(0);
        } 
        else if (month1 == month2) 
        {
            if (day1 > day2) 
            {
                if ((day1 + 1) == day2) 
                {
                    cout << 2;
                    exit(0);
                }
                ans = day1 - day2 + 1;
                cout << ans;
                exit(0);
            } 
            else 
            {
                cout << 0;
                exit(0);
            }
        }
    }
    else
    {
        int flag = year1 - year2;
        if(flag == 1)
        {
            if(month1 > month2)
            {
                ans+=365;
                ans+=(Month[month1-1]-day1+1);
                for(int i = 0;i<((month1 - month2)-1);i++)
                {
                    ans+=Month[month1+i+1];
                }
                ans+=day2;
                if((month1<=2&&(year1 % 4 == 0 && (year1 % 100 != 0 || year1 % 400 == 0)))||(month2<=2&&(year2 % 4 == 0 && (year2 % 100 != 0 || year2 % 400 == 0))))
            {
                ++ans;
            }
            cout<<ans;
            exit(0);
            }
            ans+=(Month[month1]-day1+1);
            for(int i = 0; i < 12 - month1; i++)
            {
                ans+=Month[month1+i+1];
            }
            for(int i = 0; i < month2 - 1; i++)
            {
                ans+=Month[i+1];
            }
            ans+=day2;
            if((month1<=2&&(year1 % 4 == 0 && (year1 % 100 != 0 || year1 % 400 == 0)))||(month2<=2&&(year2 % 4 == 0 && (year2 % 100 != 0 || year2 % 400 == 0))))
            {
                ++ans;
            }
            cout<<ans;
            exit(0);
        }
        else
        {
            int num = year1 - year2 -1;
            ans = 365 * num;
            ans+=(Month[month1]-day1+1);
            for(int i = 0; i < 12 - month1; i++)
            {
                ans+=Month[month1+i+1];
            }
            for(int i = 0; i < month2 - 1; i++)
            {
                ans+=Month[i+1];
            }
            ans+=day2;
            if((month1<=2&&(year1 % 4 == 0 && (year1 % 100 != 0 || year1 % 400 == 0)))||(month2<=2&&(year2 % 4 == 0 && (year2 % 100 != 0 || year2 % 400 == 0))))
            {
                ++ans;
            }
            ans+=((num+2)/4);
            cout<<ans;
            exit(0);
        }
    }
    return 0;
}

全部评论

相关推荐

咩咩子_:项目和图形引擎岗没啥关系,最好还是项目和岗位有相关度好点,不然真有面也不一定会问很多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务