版内有好几篇,自己找一下。
看看:
#include<stdio.h>
/* year是否为闰年 */
int leapyear(int year)
{
if( (year%4==0 && year%100!=0) || year%400==0 )
return 1;
else
return 0;
}
/* 求某年某月某日是该年的第几天 */
int dayindex(int year,int month,int day)
{
int days=0,d;
int i;
for(i=1;i<month;i++)
{
switch(i)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
d=31;break;
case 4:case 6:case 9:case 11:
d=30;break;
case 2:
if(leapyear(year))
d=29;
else
d=28;
break;
}
days+=d;
}
days+=day;
return days;
}
int main( )
{
int T,k;
int year,month,day;
int i;
int daysum;
int flag;
scanf("%d",&T);
for(k=0;k<T;k++)
{
/* 输入年,月,日 */
scanf("%d-%d-%d",&year,&month,&day);
/* 看看你有没有18岁的生日:只有出生在闰年2月29日并且过18年后不是闰年*/
flag=1;
if( leapyear(year)==1 && month==2 && day==29 && leapyear(year+18)==0 )
flag=0;
else
{
/* 求该年后第一年至18岁生日前以前所经历的天数 */
daysum=0;
for(i=year+1;i<year+18;i++)
{
daysum+=365;
if(leapyear(i))
daysum++;
}
/* 总的天数要加上出生那年所剩天数和18岁那年多活的天数 */
if(leapyear(year))
daysum+=(366-dayindex(year,month,day));
else
daysum+=(365-dayindex(year,month,day));
daysum+=dayindex(year+18,month,day);
}
if(flag)
{
/* 输出到18岁生日那天你所经历的天数,好好珍惜时间哦 */
printf("%d\n",daysum);
}
else
printf("-1\n");
}
return 0;
}