题解:P5716 【深基3.例9】月份天数

· · 题解

题意简述

给定年份和月份,求这个月有多少天。

思路

我们用小学学过的 N 种方法都可以知道,1,3,5,7,8,10,12 月有 31 天,除 2 月之外,其余是 30 天,但 2 月要关注一下年份问题,如果是闰年, 2 月是 29 天,否则 28 天。

那我们可以使用一个数组,其下标对应月份,数值对应天数。在输出之前处理闰年的问题即可。

更详细的解释看下面的注释。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[13];
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int y, m; cin >> y >> m;
    a[1] = a[3] = a[5] = a[7] = a[8] = a[10] = a[12] = 31; // 处理大月
    a[4] = a[6] = a[9] = a[11] = 30; a[2] = 28; // 处理小月
    if(y % 4 == 0 && y % 100 != 0) a[2] = 29; 
    if(y % 400 == 0) a[2] = 29;
    // 处理闰年 2 月(四年一闰,百年不闰,四百年再闰)
    cout << a[m]; // 输出
    return 0;
}