杭电1201
发布网友
发布时间:2022-05-10 17:28
我来回答
共2个回答
热心网友
时间:2023-10-19 01:07
直接return总天数的方法确实是最快的,但是楼主错在对闰年的判断上。不是简单的a%4就表示是闰年。
而是 a%400==0||(a%100!=0 && a%4==0)。
这样,18岁如果有生日的话,所经过的天数就不仅仅有6574和6575天两种可能了,会出现6573天。例如,1987年生的人,由于1900年不是闰年,所以到18岁生日那天只经过了3个闰年,1904,1908,1912。
把你代码原来的逻辑修改下,或者像一楼那样依次判断18年也可以。
热心网友
时间:2023-10-19 01:07
你把问题想的太简单了,我把我的代码让你看下
#include<stdio.h>
int isyear(int t)
{
if(t%4==0)
{
if(t%100==0)
{
if(t%400==0) return 1;
else return 0;
}
else return 1;
}
else return 0;
}
int main()
{
int n,y,m,d,sum,i;
scanf("%d",&n);
while(n--)
{
sum=6570;//这里先假定每个月30天
scanf("%d-%d-%d",&y,&m,&d);
if(isyear(y)==1&&m==2&&d==29)//如果那人是闰年的2月29日出生就没有18岁的生日
printf("-1\n");
else
{
if(isyear(y)&&m<=2)
sum+=1;
for(i=1;i<18;i++)
if(isyear(y+i))
sum+=1;
if(isyear(y+i)&&m>2)
sum+=1;
printf("%d\n",sum);
}
}
return 0;
}
如果还没解决你的问题,可以加我百度HI账号。