题目链接:18岁生日
给出出生日期,问到18岁生日有多少天
如图,我们要求的实际是黑线的区域,但为了简化计算我实际是按红线区域求得
因此在端点出也要判断闰年的情况
如果出生当年是闰年,且在2月之前出生,我们就经过了一个闰年,但在计算时没有加进去,因此要加上一天
同理在18岁生日当年也要判断
#include<iostream>
using namespace std;
#include<stdio.h>
int main()
{ int fun(int i);
int t,y,m,d,sign,sum,s,h,i;
cin>>t;
while(t--)
{sum=0;
scanf("%d-%d-%d",&y,&m,&d);
if(m==2&&d==29)
printf("-1\n");
else
{
for(i=y+1;i<y+19;i++)
{
if(fun(i))sum=sum+366;
else sum=sum+365;
}
if(fun(y))if(m<=2)sum++;//在端点位置还要进行考虑2月29日的特殊点;
if(fun(y+18))if(m<=2)sum--;//在端点位置还要进行考虑2月29日的特殊点;
printf("%d\n",sum);
}
}
return 0;
}
int fun(int i)
{
if(i%4==0&&i%100!=0||i%400==0)
return 1;
return 0;
}