首页 > 其他 > 详细

NYOJ-20岁生日

时间:2014-08-30 23:12:30      阅读:552      评论:0      收藏:0      [点我收藏+]

20岁生日

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
描述
路过这的20岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达20岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达20岁生日所经过的总天数,让他好来比较一下。
输入
一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
输出
T行,每行一个数,表示此人从出生到20岁生日所经过的天数。如果这个人没有20岁生日,就输出-1。
样例输入
1
1988-03-07
样例输出
7305

代码:

#include<stdio.h>
int f[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool leap_year(int n)
{
	if(n%4==0&&n%100!=0||n%4==0&&n%400==0)
	return true;
	else
	return false;
}
int DAY(int year,int month,int day)
{
	int i,sum=0;
	for(i=1;i<month;++i)
	sum+=f[i];
	sum+=day;
	if(month>2&&leap_year(year))
	return sum+1;
	else
	return sum;
}
int main()
{
	int T,year,month,day,i,sum;
	scanf("%d",&T);
	while(T--)
	{
	    scanf("%d-%d-%d",&year,&month,&day);
	    if(month==2&&day==29&&!leap_year(year+20))
	    {
	    	printf("-1\n");
	    	continue;
	    }
	    sum=0;
	    for(i=1;i<=19;++i)
	    {
	      if(leap_year(year+i))
	      sum+=366;
	      else
	      sum+=365;
	    }
		if(leap_year(year))
		sum=sum+(366-DAY(year,month,day));
		else
		sum=sum+(365-DAY(year,month,day));
	    sum+=DAY(year+20,month,day);
	    printf("%d\n",sum);
	}
	return 0;
}

解题报告:

闰年并不都是每四年一润:【 四年一润,百年不润,四百年再润】

例:1980是闰年,1900并不是闰年

NYOJ-20岁生日

原文:http://blog.csdn.net/qq_18062811/article/details/38948027

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!