- 描述
- 路过这的20岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达20岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达20岁生日所经过的总天数,让他好来比较一下。
- 输入
- 一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
- 输出
T行,每行一个数,表示此人从出生到20岁生日所经过的天数。如果这个人没有20岁生日,就输出-1。
- 样例输入
-
1 1988-03-07
-
样例输出
7305
解题思路:先算出从出生到出生这年结束一共经过了多少天,然后加上从出生第2年到出生第19年每年的天数,最后加上20岁生日那年要经过多少天才是他的生日。 注意:(1)、如果出生这年是闰年,而20年后不是闰年,输出-1;(2)、出生这天为出生的第0天
参考代码:
#include<stdio.h> int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int leapyear(int x) //判断闰年 { if((x%4==0&&x%100!=0)||x%400==0) return 1; return 0; } int count(int a,int b,int c) //判断一年中的第几天 { int s=0,i; if(a%4==0&&a%100!=0||a%400==0) { for(i=1;i<b;i++) s+=m[i]; if(b>2) return s+c+1; //注意闰年2月是29天 else return s+c; } else { for(i=1;i<b;i++) s+=m[i]; return s+c; } } int main() { int j,n,Y,M,D,sum,y,m,d; scanf("%d",&n); while(n--) { scanf("%d-%d-%d",&Y,&M,&D); if(M==2&&D==29&&!leapyear(Y+20)) { printf("-1\n"); continue; } sum=0; if(leapyear(Y)) sum+=366-count(Y,M,D); else sum+=365-count(Y,M,D); j=1; Y++; while(j<=20) { if(leapyear(Y)&&j!=20) sum+=366; else if(!leapyear(Y)&&j!=20) sum+=365; else if(j==20) sum+=count(Y,M,D); Y++; j++; } printf("%d\n",sum); } return 0; }