杭电1201之18岁生日

Problem Description
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

分析:

题目本身不难,有一个地方不容易想到,若此人出生时某一年的2月29日,则该年必为闰年,且18年之后不可能为闰年,所以此时没有18岁生日!!!

AC代码如下:

#include "iostream"
#include "stdio.h"
using namespace std;
  
int main( int argc, char * argv[])
{
     int y,m,d; //年月日
     int i;
     int n,sum; //sum记录总天数
     int a[15]={0,31,29,31,30,31,30,31,31,30,31,30,31}; //闰年的12个月
     int b[15]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //平年的12个月份
     cin>>n;
     while (n--)
     {
         scanf ( "%d-%d-%d" ,&y,&m,&d);
         if (m==2&&d==29) //没有18岁生日的条件
         {
             cout<<-1<
         }
         else
         {
  
         sum=0;
         if (y%400==0||(y%4==0 && y%100!=0))
         {
             sum+=(a[m]-d);
             for (i=m+1;i<=12;i++)
             {
                 sum+=a[i];
             }
          
             for (i=y+1;i
             {
                 if (i%400==0||(i%4==0&&i%100!=0))
                 {
                     sum+=366;
                 }
                 else
                 {
                     sum+=365;
                 }
             }
              
             sum+=d;
             if ((y+18)%400==0||((y+18)%4==0&&(y+18)%100!=0))
             {
                 for (i=1;i
                 {
                     sum+=a[i];
                 }
             }
             else
             {
                 for (i=1;i
                 {
                     sum+=b[i];
                 }
             }
              
         }
         else
         {
             sum+=(b[m]-d);
             for (i=m+1;i<=12;i++)
             {
                 sum+=b[i];
             }
             for (i=y+1;i
             {
                 if (i%400==0||(i%4==0&&i%100!=0))
                 {
                     sum+=366;
                 }
                 else
                 {
                     sum+=365;
                 }
             }
             sum+=d;
             if ((y+18)%400==0||((y+18)%4==0&&(y+18)%100!=0))
             {
                 for (i=1;i
                 {
                     sum+=a[i];
                 }
             }
             else
             {
                 for (i=1;i
                 {
                     sum+=b[i];
                 }
             }
         }
         cout<
         }
     }
     return 0;

你可能感兴趣的:(计算年月日问题)