1105: 18岁生日

题目描述
Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。

输入
一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。

输出
T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。

样例输入
1
1988-03-07
样例输出
6574

-----------------------------------------------------我是分割线----------------------------------------------------------
这道题主要考查的只是对于闰年的认识,对于我一个小白来说却是很难很难的,因为要顾虑的方面太多,
好了废话不多,开始进入代码;

#include <stdio.h>
#include <stdlib.h>

int fan(int n) //定义一个自定义的函数,用来判断所给的年份是否是闰年,这个很重要,建义实用函数,否则代码会很长;
{
if (((n%40 && n%100!=0) || n%4000)) return 1; // 闰年判断方法,不解释了;
else return 0;
}

int main()
{
int c,n,y,r,rn,i; //个人习惯,c代表测试数据的测试次数,n代表年份,y代表月,r代表日,rn代表结果的天数,i控制循环;
scanf("%d",&c);
{ while(c–)
{ rn=0;k=0;rn=18365; //无论是怎么样的年份,18365天一定会有,结果数只会比这个多不会比这个少;
scanf("%d-%d-%d",&n,&y,&r); // 注意输入格式!!!!
if(fan(n) && y2 && r29) printf("-1\n");
// 如果出生在闰年的2月29日,则没有18岁生日;因为18年后没有2月29日(4年一润);
else {for(i=1;i<18;i++)
{if(fan(n+i))rn++; // 经历一个闰年,天数就加一;}
if(fan(n))
{if(y1)
rn++; //如果输入的是闰年并且输入的月份是1月,天数则加一,因为一开始的第一年如果是闰年,当年的二月为29天,则总数少加一天;
else if(y
2 && r<=28) //这里有个特殊情况,如果输入的是二月但是没有到29号,则也加一天,理由同上;
rn++;}
if(fan(n+18)==1) //如果生日当年是闰年;
{
if(y>2) rn++;//并且生日在2月之后,总数再加一天;
}
printf("%d\n",rn); }//输出,完毕;
}
return 0;}}

小结:其实最近因为发生了很多事情,没有时间来写博客,但是代码还在继续的锻炼,很惭愧,今天这到题并不是我一个人独立完成的,借助了学长的帮助,为了加深印象所以写了此篇博客,帮助那些有困惑的同学,也为了给自己加深印象,正所谓双赢。

有什么我没写清楚的欢迎加我微信哦;hjs1453100406;
下次再见!bye~~

猜你喜欢

转载自blog.csdn.net/HJS1453100406/article/details/88750738