zcmu.oj-1734 18岁(年龄计算)

Description

小明的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

代码:

  1. #include<stdio.h>  
  2. int isleap(int n)  
  3. {  
  4.     if ((n%4==0&&n%100!=0)||n%400==0)  
  5.     {  
  6.         return 1;  
  7.     }  
  8.     return 0;  
  9. }  
  10. int main()  
  11. {  
  12.     int times,year,month,day,sum,i;  
  13.     scanf("%d",×);  
  14.     while (times--)  
  15.     {  
  16.         sum=0;  
  17.         scanf("%d-%d-%d",&year,&month,&day);  
  18.         if (month==2&&day==29)//首先他必须不能是29天,因为如果他小于等于28天,18年后他都有对应的天,唯独不能是29天  
  19.         {  
  20.                 printf("-1\n");  
  21.         }  
  22.         else  
  23.         {  
  24.             if (isleap(year)&&month<3)//如果month小于3,则无需判断18年后是否瑞年!  
  25.             {  
  26.                 sum++;  
  27.             }  
  28.             else if (isleap(year+18)&&month>=3)  
  29.             {  
  30.                 sum++;  
  31.             }//如果month大于3,则需判断18年后是否瑞年!  
  32.             for (i=year+1;i<=year+17;i++)  
  33.             {  
  34.                 if (isleap(i))  
  35.                 {  
  36.                     sum++;  
  37.                 }  
  38.             }  
  39.             printf("%d\n",sum+365*18);  
  40.         }  
  41.     }  

猜你喜欢

转载自blog.csdn.net/kyrieee/article/details/80404885