题解 | #打印日期#

打印日期

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

#include <iostream>
using namespace std;

class Date {
  public:
    Date(int y = 1, int m = 1, int d = 1) {
        _year = y;
        _month = m;
        _day = d;
    }
    int Days(int y, int m) {
        int arr[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        if (m == 2 )
            if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
                return 29;
        return arr[m];
    }
    Date operator+(int n) {
        Date tmp = *this;

        tmp._day += n;
        while (tmp._day > Days(tmp._year, tmp._month)) {
            tmp._day -= Days(tmp._year, tmp._month);
            tmp._month++;
                    while (tmp._month > 12) {
                        tmp._month -= 12;
                        tmp._year++;
                    }
        }

        return tmp;
    }

    Date& operator++() {
        *this = *this + 1;
        return *this;
    }
  
    int _year;
    int _month;
    int _day;
};

int main() {
    int a, b;
    while (cin >> a >> b) { // 注意 while 处理多个 case
        Date d0(a);
        while (--b > 0) {
            ++d0;
        }
        printf("%4d-%02d-%02d\n",d0._year,d0._month,d0._day);
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务