3218. 日期计算 非常简单的日期模拟题 一遍过

90 阅读1分钟

3218. 日期计算 - AcWing题库

思想

从y年1月1日开始,让day=1,模拟翻日历开始往后翻。用一个cnt统计,每翻一页日历统计一天,如果cnt翻到了d天,说明翻够了,不再翻了。

#include <iostream>
using namespace std;
bool is_leap(int y)
{
    if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
        return true;
    return false;
}

int main()
{
    int y, d;
    cin >> y >> d;

    int cnt = 1;

    int m=1,day=1;
    while (cnt != d)
    {
        day++;
        if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
        {
            if (day == 32)
            {
                m++;
                day = 1;
            }
        }
        else if (m == 4 || m == 6 || m == 9 || m == 11)
        {
            if (day == 31)
            {
                m++;
                day = 1;
            }
        }
        else if (m == 2 && is_leap(y))
        {
            if (day == 30)
            {
                m++;
                day = 1;
            }
        }
        else if (m == 2 && !is_leap(y))
        {
            if (day == 29)
            {
                m++;
                day = 1;
            }
        }

        cnt++;
    }

    cout << m << endl << day;
    return 0;
}