18岁生日

Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。 

Input

一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。 

Output

T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。 

Sample Input

1
1988-03-07

Sample Output

6574

AC代码(暴力)

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int pan(int y)
{
    if((y%4==0&&y%100!=0)||(y%400==0))
        return 1;
    else
        return 0;
}
int chu(int y, int m, int d)
{
    int sm = 0, i;
    if(m!=2)
    {
        for(i = m+1; i<=12; i++)
        {
            if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
                sm = sm + 31;
            else if(i==4||i==6||i==9||i==11)
                sm = sm + 30;
            else if(i==2)
            {
                if(pan(y)==1)
                    sm = sm + 29;
                else
                    sm = sm + 28;
            }
        }
        if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
            sm = sm + 31-d;
        else if(m==4||m==6||m==9||m==11)
            sm = sm + 30-d;
    }
    else if(m==2)
    {
        if(pan(y)==0)
        {
            sm = sm + 28-d;
        }
        else if(pan(y)==1)
        {
            sm = sm + 29-d;
        }
        for(i = m+1; i<=12; i++)
        {
            if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
                sm = sm + 31;
            else if(i==4||i==6||i==9||i==11)
                sm = sm + 30;
        }
    }
    return sm;
}
int zui(int y, int m, int d)
{
    int i, sm = d;
    for(i = 1; i<=m-1; i++)
    {
        if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
            sm = sm + 31;
        else if(i==4||i==6||i==9||i==11)
            sm = sm + 30;
        else if(i==2)
        {
            if(pan(y)==1)
                sm = sm + 29;
            else if(pan(y)==0)
                sm = sm + 28;
        }
    }
    return sm;
}
int main()
{
    int t, i, y, m, d;
    scanf("%d",&t);
    while(t--)
    {
        int sm = 0;
        scanf("%d-%d-%d",&y, &m, &d);
        if(m==2&&d==29&&pan(y+18)==0)
            printf("-1\n");
        else
        {
            for(i = y+1; i<=y+17; i++)
            {
                if(pan(i)==0)
                    sm = sm + 365;
                else if(pan(i)==1)
                    sm = sm + 366;
            }
            sm = sm + chu(y, m, d);
            sm = sm + zui(y+18, m, d);
            printf("%d\n",sm);
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41524782/article/details/81392936
今日推荐