题目:http://acm.gdufe.edu.cn/Problem/read/id/1046
18岁生日
Time Limit: 2000/1000ms (Java/Others)
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
思路:判断是不是闰年,从而判断加365还是366,如果出生在三月及以后,则要判断出生那年和18岁那年是否闰年
难度:简单
代码:
1 #include<stdio.h> 2 int main() 3 { 4 int n,a,b,c,i,sum; 5 while(scanf("%d",&n)!=EOF) 6 { 7 while(n--) 8 { 9 sum=0; 10 scanf("%d-%d-%d",&a,&b,&c); 11 if(b==2&&c==29) 12 { 13 printf("-1 "); 14 continue; 15 } 16 for(i=a;i<a+18;i++) 17 if(i%100==0) 18 if(i%400==0) 19 sum+=366; 20 else sum+=365; 21 else if(i%4==0) 22 sum+=366; 23 else sum+=365; 24 if(b>2) 25 { 26 if(a%400==0||a%100!=0&&a%4==0) 27 sum-=1; 28 if((a+18)%400==0||(a+18)%100!=0&&(a+18)%4==0) 29 sum+=1; 30 } 31 printf("%d ",sum); 32 } 33 } 34 return 0; 35 }