题解 | #日期差值#

日期差值

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

#include <iostream>
using namespace std;
int month_day[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
//计算某年的天数
int year_days(int year){
    if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return 366;
    return 365;
}
//距离下一年的天数
int distance_days(int year,int month,int day){
    int days = 0;
    days += month_day[month] - day;
    while(month <= 2 && (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)) ++days;

    ++month;
    while(month <= 12){
        days += month_day[month++];
    }
    return days;
}

//一年已经经过的天数
int past_days(int year,int month,int day){
    int days = 0;
    days += day;
    if(month > 2 && (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)) ++days;
    --month;
    while(month > 0){
        days += month_day[month--];
    }
    return days;
}
int main() {
    int pre_date, last_date;
    while (cin >> pre_date >> last_date) { 

        int days = 0;

        //处理日期
        int pre_year, last_year, pre_month, last_month, pre_day, last_day;
        pre_year = pre_date / 10000;
        last_year = last_date / 10000;
        pre_date %= pre_year * 10000;
        last_date %= last_year * 10000;
        pre_month = pre_date / 100;
        last_month = last_date / 100;
        pre_day = pre_date % (pre_month * 100);
        last_day = last_date % (last_month * 100);
        //计算天数
        if(pre_year == last_year ){
            days = year_days(pre_year) - past_days(pre_year,pre_month,pre_day) - distance_days (last_year ,last_month, last_day);
        }
        else{
            days = distance_days(pre_year, pre_month, pre_day);
            pre_year++;
            while(pre_year < last_year){
                days += year_days(pre_year);
                ++pre_year;
            }
            days += past_days(last_year, last_month, last_day);
        }
        ++days;
        cout << days << endl;
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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