题解 | 日期累加

#include <iostream>

using std::cout;
using std::cin;
using std::endl;

int main() {
    int num;  // 样例个数
    cin >> num;
    int y, m, d;
    int n;
    for (int i = 0; i < num; i++) {
        cin >> y >> m >> d >> n;
        n += d;
        while (n > 31) {
            bool flag = false;  // 标记是否为闰年
            if ((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) flag = true;
            switch (m) {
                case 1:
                    if (n > 31) {
                        n -= 31;
                        m++;
                    } else break;
                case 2:
                    if (flag) {
                        if (n > 29) {
                            n -= 29;
                            m++;
                        } else break;
                    } else {
                        if (n > 28) {
                            n -= 28;
                            m++;
                        } else break;
                    }
                case 3:
                    if (n > 31) {
                        n -= 31;
                        m++;
                    } else break;
                case 4:
                    if (n <= 30) break;
                    n -= 30;
                    m++;
                case 5:
                    if (n <= 31) break;
                    n -= 31;
                    m++;
                case 6:
                    if (n <= 30) break;
                    n -= 30;
                    m++;
                case 7:
                    if (n <= 31) break;
                    n -= 31;
                    m++;
                case 8:
                    if (n <= 31) break;
                    n -= 31;
                    m++;
                case 9:
                    if (n <= 30) break;
                    n -= 30;
                    m++;
                case 10:
                    if (n <= 31) break;
                    n -= 31;
                    m++;
                case 11:
                    if (n <= 30) break;
                    n -= 30;
                    m++;
                case 12:
                    if (n <= 31) break;
                    n -= 31;
                    m = 1;
                    y++;
            }
        }
        // 按照yyyy-mm-dd格式输出日期
        cout << y << '-';
        if (m < 10) cout << 0;
        cout << m << '-';
        if (n < 10) cout << 0;
        cout << n << endl;
    }
    return 0;
}

全部评论

相关推荐

瑞雪兆丰年_:可以贴个超级大的校徽,以防HR眼拙
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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