比较简单的一道题目,但是有些细节还是要小心,注意编程时遵循先特殊后一般的规律,先处理生日为2月29的情况
此后就可以根据月份确定年份取那边的边界计算:
#include <iostream>
using namespace std;
int day_of_month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int day_num(int year)
{
if(!(year%4)&&(year%100)||!(year%400))return 366;
else return 365;
}
int main()
{
int year,month,day;
char c;
int n;
cin>>n;
while(n--)
{
cin>>year>>c>>month>>c>>day;
if(month==2&&day==29)
if(day_num(year+18)==365)
{
cout<<-1<<endl;continue;
}
int sum=0;
if(month<3)
{
for(int i=0;i<18;i++)sum+=day_num(year+i);
}
else for(int i=1;i<=18;i++)sum+=day_num(year+i);
cout<<sum<<endl;
}
return 0;
}