题解 | #日期差值#

日期差值

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

#include <iostream>
using namespace std;

// 获取某年某月的天数
int GetMonthDay(int year, int month) {
    int month_days[] = { 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 month_days[month - 1];
}

// 日期类
class Date {
public:
    Date(int year = 0, int month = 0, int day = 0)
        : _year(year), _month(month), _day(day) {}

    friend Date GetDate(int n);

    // 前置++操作符,用于日期自增
    Date& operator++() {
        _day++;
        if (_day > GetMonthDay(_year, _month)) {
            _day = 1;
            _month++;
            if (_month == 13) {
                _month = 1;
                _year++;
            }
        }
        return *this;
    }

    // 计算两个日期之间的天数差
    int operator-(const Date& d) const {
        Date min_date = *this < d ? *this : d;
        Date max_date = *this < d ? d : *this;
        int days = 0;
        while (min_date != max_date) {
            ++min_date;
            days++;
        }
        return *this < d ? -days : days;
    }

    bool operator<(const Date& d) const {
        if (_year != d._year) return _year < d._year;
        if (_month != d._month) return _month < d._month;
        return _day < d._day;
    }

    bool operator==(const Date& d) const {
        return _year == d._year && _month == d._month && _day == d._day;
    }

    bool operator!=(const Date& d) const {
        return !(*this == d);
    }

private:
    int _year;
    int _month;
    int _day;
};

// 从 YYYYMMDD 格式的整数中解析出 Date 对象
Date GetDate(int n) {
    int year = n / 10000;
    int month = (n / 100) % 100;
    int day = n % 100;
    return Date(year, month, day);
}

int main() {
    int n1, n2;
    while (cin >> n1 >> n2) {
        Date d1 = GetDate(n1);
        Date d2 = GetDate(n2);
        cout << d2 - d1 + 1 << endl;
    }
    return 0;
}

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务