はまやんはまやんはまやん

hamayanhamayan's blog

Die tertia (ディエ・テルツィア) [yukicoder No.721]

https://yukicoder.me/problems/no/721

解法

https://yukicoder.me/submissions/276737

与えられた日付を解釈するにはC++ならssprintfを使おう。
うるう年判定は面倒臭がって解説をそのまま取ってきてしまった。
あとは、Dを2つ増やして、Dが月の最大日数を超えたら、Mを増やして、Mが12を超えたらYを増やしていく。
出力は10の位を0埋めするために%02dとしている。

int days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 
string S;
int Y, M, D;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> S;
    sscanf(S.c_str(), "%d/%d/%d", &Y, &M, &D);

    if (Y % 4 == 0 && !(Y % 100 == 0 && Y % 400 != 0)) days[2] = 29;

    D += 2;
    if (days[M] < D) {
        D -= days[M];
        M++;
        if (12 < M) {
            Y++;
            M = 1;
        }
    }

    printf("%04d/%02d/%02d\n", Y, M, D);
}