Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。
一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。
1988-03-07
6574
很简单的一道题,毋庸赘述,直接上代码了:
#include <iostream> using namespace std; struct Date { int year,month,day; }dt; // 判断是否闰年 bool isleap(int year) { if((year%4==0 && year%100!=0) || year%400==0) return 1; return 0; } // 求某一天是该年的第几天 int dday(int year,int month,int day) { int i,sum=0; for(i=1;i<month;++i) { switch(i) { case 1:sum+=31;break; case 3:sum+=31;break; case 5:sum+=31;break; case 7:sum+=31;break; case 8:sum+=31;break; case 10:sum+=31;break; case 12:sum+=31;break; case 4:sum+=30;break; case 6:sum+=30;break; case 9:sum+=30;break; case 11:sum+=30;break; case 2: { if(isleap(year)) sum+=29; else sum+=28; }break; } } return sum+day; } int main() { int n,i,days; char x; cin>>n; while(n--) { cin>>dt.year>>x>>dt.month>>x>>dt.day; // 如果这个人没有18岁生日 if(dt.month==2 && dt.day==29 && !isleap(dt.year+18)) { cout<<-1<<endl; continue; } // 初始化的天数为 出生那年到年末的天数 if(isleap(dt.year)) days=366-dday(dt.year,dt.month,dt.day); else days=365-dday(dt.year,dt.month,dt.day); // 从出生第二年循环到第17年 for(i=dt.year+1;i<dt.year+18;++i) if(isleap(i)) days+=366; else days+=365; // 输出天数 cout<<days+dday(dt.year+18,dt.month,dt.day)<<endl; } return 0; }