计算方法:
<1>、将出生年经过的天数与18岁那年经过的天数加在一起算作一年。
<2>、不算闰年,则18年共度过18*365天。
<3>、考虑闰年,出生年与18岁生日合在一起那年单独考虑,其他年份只要是闰年,总天数加1天即可。
<4>、单独考虑合在一起年份,若出生年是闰年,且在2月29日之前出生,那么他(她)必定经过2月29日这天,总天数加1;对于18岁那年,若是闰年,且在2月28日之后出生的,他(她)同样经过2月29这天,总天数加1.
#include<iostream> using namespace std; bool isleap(int y) { if(y%4==0&&(y%100!=0||y%400==0)) return true; return false; } int main() { int y,m,d; int T,sum,i; cin>>T; while(T--) { scanf("%d-%d-%d",&y,&m,&d); if(!isleap(y+18)&&m==2&&d==29) cout<<"-1"<<endl; else { sum=18*365; if(isleap(y)&&(m<2||(m==2&&d<=28))) sum++; if(isleap(y+18)&&(m>2||(m==2&&d==29))) sum++; for(i=y+1;i<=y+17;i++) if(isleap(i)) sum++; cout<<sum<<endl; } } return 0; }
时间: 2024-10-12 23:53:15