[ACM]18岁生日

Problem Description

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

Input

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

Output

Sample Input

1
1988-03-07

Sample Output

6574

Author

Gardon

Source

Gardon-DYGG Contest 2


解题思路:如下代码


代码:

#include <iostream>
using namespace std;
bool rui(int year)//判断瑞年
{
    if(year%4==0&&year%100!=0||year%400==0)
        return 1;
    else
        return 0;
}
int main()
{
    int T;
    char a[11];//用来保存输入的年月日以及----
    cin>>T;
    int i,j;
    int year,month,day,days;
    for(i=1;i<=T;i++)
    {
        days=0;//需要输出的天数
        for(j=0;j<10;j++)
            cin>>a[j];
        for(j=0;j<=3;j++)
            if(a[j]!='0')
            break;//判断0出现的位置,从而进行年份的计算
        if(j==4)//前四位都为0,年份为0
            year=0;
        else if(j==3)
            year=int(a[3]-'0');//前三位为0,第四位不为0,年份为1位数
        else if(j==2)
            year=int(a[2]-'0')*10+int(a[3]-'0');//前两位为0,第三位部位0,年份为2位数
        else if(j==1)
            year=int(a[1]-'0')*100+int(a[2]-'0')*10+int(a[3]-'0');//第一位为0,第二位不为0,年份为3位数
        else
            year=int(a[0]-'0')*1000+int(a[1]-'0')*100+int(a[2]-'0')*10+int(a[3]-'0');//第一位就不是‘0’,年份为4位数

        //判断月份
        if(a[5]=='0')
            month=int(a[6]-'0');//月份的一个数为0,月份为一位数
        else
            month=int(a[5]-'0')*10+int(a[6]-'0');//月份为两位数

        //判断日数
        if(a[8]=='0')
            day=int(a[9]-'0');
        else
            day=int(a[8]-'0')*10+int(a[9]-'0');


        if(rui(year)&&month==2&&day==29&&!rui(year+18))
            cout<<-1<<endl;//当出生为瑞年的2月29以及18年后的那一年不是瑞年(没有2月29日),即没有18岁生日
        else
        {
                int temp;
                temp=year;
                for(;year<=temp+17;year++)
            {
                if((month<2)||(month==2&&day<=28))//日数小于等于二月28日
                  {

                        if(rui(year))
                    {
                            days+=366;
                    }
                        else
                            days+=365;
                  }
                else
                {
                    if(rui(year+1))
                        days+=366;
                    else
                        days+=365;
                }
            }
            cout<<days<<endl;
        }
    }
    return 0;
}


运行截图:



原文地址:https://www.cnblogs.com/sr1993/p/3697834.html