1.5211: 18岁

你到18岁需要过几天,当然你的18岁生日还有可能不存在,比如你是今年2月29日出生的,那你每四年就只能过一个生日,18不是4的倍数,所以没生日可过。

我们用变量sum表示我们到18岁的天数,接下来就只需要解决闰年还有平年的问题了,你是3月出生的,那今年闰年和你无关啊,你是二月前才有关联,所以二月之后生日的你需要看的是下一年是不是闰年。也就是你的1岁生日不是因为你出生的那年是闰年就是366天,而是因为1.今年是闰年,而且你是3月前出生。2.明年是闰年,而且你是3月后(包含)出生

两个数字之间的-可以用一个char字符读入

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

//判断闰年函数
bool isLeapYear(int y)
{
    if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
        return true;
    return false;
}

int main()
{
    int T;
    cin >> T;
    while (T--)
    {
        int y, m, d;
        char c;
        //读入年月日,中间用char隔开
        cin >> y >> c >> m >> c >> d;
        //总日子数sum
        int sum = 0;
        //2.29没生日输出
        if (m == 2 && d == 29)
        {
            cout << "-1" << endl;
            continue;
        }
        //3月之后(包括)看下一年
        if (m > 2)
            y++;
        //循环18年
        for (int i = y; i < y + 18; i++)
        {
            if (isLeapYear(i))
                sum += 366;
            else
                sum += 365;
        }
        cout << sum << endl;
    }
    return 0;
}
View Code

相关文章: