航电oj1201 AC代码
using namespace std;
#include<iostream>
bool leapyear(int x)
{
if((x%4 == 0&&x%100 != 0)||(x%100 == 0&&x%400 == 0))
return true;
else
return false;
}
int getyear(char *a)
{ int year=0;
for(int i=0;i<=3;i++)
{
year*=10;
year=year+int(a[i]-48);
}
return year;
}
int main()
{
int T,sum_day = 6570,year1=0,year2=0;
char borndate[11];
cin>>T;
while(T--)
{
int addday=0;
cin>>borndate;
year1 = getyear(borndate);
year2 = year1+18;
if(borndate[5]=='0'&&borndate[6]=='2'&&borndate[8]=='2'&&borndate[9]=='9')
{
cout<<"-1"<<endl;
}
else if(leapyear(year1)==false&&leapyear(year2) == false)
{
for(int i=year1+1;i<year2;i++)
if(leapyear(i))
addday++;
cout<<sum_day+addday<<endl;
}
else if(leapyear(year1)==true&&leapyear(year2)==false)
{
for(int i=year1+1;i<year2;i++)
if(leapyear(i))
addday++;
if(borndate[6]>='3'||borndate[5]>'0')
cout<<sum_day+addday<<endl;
if(borndate[6]<'3'&&borndate[5] == '0')
cout<<sum_day+addday+1<<endl;
}
else if(leapyear(year1)==false&&leapyear(year2)==true)
{
for(int i=year1+1;i<year2;i++)
if(leapyear(i))
addday++;
if(borndate[6]>='3'||borndate[5]>'0')
cout<<sum_day+addday+1<<endl;
if(borndate[6]<'3'&&borndate[5] == '0')
cout<<sum_day+addday<<endl;
}
}
return 0;
}
出生年为闰年,生日一定不为闰年,判断首尾年的情况,以及出生年在2.29的前后,即可得到到18岁生日经历的天数。