计算方法:
<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;
}
原文地址:http://blog.csdn.net/a809146548/article/details/44202065