这是一个具有常识性的数学问题
主要考虑,出生年份是在3月前,还是在3月及3月以后
如果他的生日在1、2月,那么就以当前年为起始年份,如果今年是闰年就要加一了;
如果他的生日在3月及以后,当前年是不是闰年没有影响,下一年作为起始年份考虑。
参考博客:
http://www.cnblogs.com/ACDoge/p/6133186.html
AC代码:
#include <iostream>
#include<cstdio>
using namespace std;
bool isRunYear(int n){
if(n%4==0&&n%100!=0||n%400==0)
return true;
else return false;
}
int main()
{
int t;
int y,m,d;
while(scanf("%d",&t)!=EOF){
for(int i=0;i<t;i++){
scanf("%d-%d-%d",&y,&m,&d);
if(m==2&&d==29&&!isRunYear(y+18)) printf("-1\n");
else{
int ans=0;
if(m>2)
for(int k=y+1;k<=y+18;k++){
if(isRunYear(k)) ans+=366;
else ans+=365;
}else {
for(int k=y;k<=y+17;k++){
if(isRunYear(k)) ans+=366;
else ans+=365;
}
}
printf("%d\n",ans);
}
}
}
return 0;
}