Input
Output
Sample Input
1 1988-03-07
Sample Output
6574
算法一:
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<queue>
#define LL long long
using namespace std;
const int MAXN =1e5;
const int MAXM= 1e6;
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool pan(int i)//bool 布尔型变量,取值只有0或1,即真或假
{
return i%4==0&&i%100!=0||i%400==0;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int y,m,d;
scanf("%d-%d-%d",&y,&m,&d);
if(m==2&&d==29)//出生在2月29的人只能18岁的时候还是闰年才可以。
{
if(!pan(y+18))//想想这步应该是没用的,闰年出生18年后肯定不是闰年
puts("-1");
}
else{
int cnt=0; // 之后分三部分
if(pan(y))
mon[2]=29;
else
mon[2]=28; //出生当年
cnt+=mon[m]-d;
for(int i=m+1;i<13;i++)
cnt+=mon[i];
for(int i=y+1;i<y+18;i++) //出生后一年到17岁那年
if(pan(i))
cnt+=366;else
cnt+=365;
if(pan(y+18))
mon[2]=29;else
mon[2]=28;// 18岁那年
for(int i=1;i<m;i++)
cnt+=mon[i];
printf("%d\n",cnt+d);
}
}
return 0;
}
算法二:
#include<cstdio>
bool check(int n)
{
if(n%4==0&&n%100!=0||n%400==0) return true;
return false;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int ans = 0;
char ss, rr;
int y, m, d;
scanf("%d%c%d%c%d",&y,&ss,&m,&rr,&d);
if(check(y) && m==2 && d==29)
{
puts("-1"); continue;
}
for(int i = 0; i < 18; i++)
{
if(check(y+i)) ans += 366;
else ans += 365;
}
if(check(y+18) && m>2) ans++;
if(check(y) && m>2 ) ans--;
printf("%d\n",ans);
}
return 0;
}