けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 365 A - Leap Year (8Q, 灰色, 100 点)

閏年の問題!

問題概要

1583 以上 2024 以下の整数  Y が与えられる。なお、西暦  Y 年の日数は、

  •  Y が 4 の倍数でないとき:365 日
  •  Y が 4 の倍数で、かつ 100 の倍数でないとき:366 日
  •  Y が 100 の倍数で、かつ 400 の倍数でないとき:365 日
  •  Y が 400 の倍数のとき:366 日

である。

考えたこと

問題文に書いてある通りのことをそのまま実装してもよいし、次のように考えても良い(この方が簡単になる)。


  •  Y が 400 の倍数のとき:366 日
  • そうではなく、 Y が 100 の倍数のとき:365 日
  • そうではなく、 Y が 4 の倍数のとき:366 日
  • そうでないとき:365 日

このように考えれば、if - else 文で綺麗に書ける。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int Y;
    cin >> Y;

    if (Y % 400 == 0) cout << 366 << endl;
    else if (Y % 100 == 0) cout << 365 << endl;
    else if (Y % 4 == 0) cout << 366 << endl;
    else cout << 365 << endl;
}