Description
当你还是18岁的时候,那个曾经一起追过的女孩刚好也是18岁,而且她的生日就要到了,你突然想到一个问题,是不是每个人到18岁生日所经过的天数都是一样的呢?我们来算一下吧
Input
首先输入一个整数n,表示有n组数据,格式是YYYY-MM-DD。
Output
对于每组数据输出一行,每行一个数,表示从出生到18岁生日所经过的天数。如果没有18岁生日,就输出-1。
Sample Input
2
1992-2-1
1988-3-5
Sample Output
6575
6574
题解:1、要求里的没有18岁生日仅仅指于闰年的2月29日出生,不代表还没有到18岁就是没有生日。
2、计算18年有多少天,无非就是判断这18年里有几个闰年,出生那年过的天数加上18岁那年过的天数可以凑齐为一年。
3、判断生日在2月28之前还是之后,如果在之后就判断出生那年的下一年开始,往后18年里几个闰年,之前就判断从出生那年开始,往后18年里有几个闰年。
代码(C)
#include<stdio.h>
int main()
{
int n,d,y,m,sum;
scanf("%d",&n);
for(int j=1;j<=n;j++)
{
sum=0;
scanf("%d-%d-%d",&y,&m,&d);
if(m==1)//分月份判断生日在2月28之前还是之后
{
for(int i=y;i<y+18;i++)
{
if((i%4==0&&i%100!=0)||i%400==0)
{
sum=sum+366;
}
else sum=sum+365;
}
}
else if(m>2)
{
for(int i=y+1;i<=y+18;i++)
{
if((i%4==0&&i%100!=0)||i%400==0)
{
sum=sum+366;
}
else sum=sum+365;
}
}
else if(m==2)
{
if(d==29) sum=-1;
else
{
for(int i=y;i<y+18;i++)
{
if((i%4==0&&i%100!=0)||i%400==0)
{
sum=sum+366;
}
else sum=sum+365;
}
}
}
printf("%d\n",sum);
}
return 0;
}