1105: 18岁生日

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

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

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

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

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

#include 
#include 

   int fan(int n)     //定义一个自定义的函数,用来判断所给的年份是否是闰年,这个很重要,建义实用函数,否则代码会很长;
 {
    if (((n%4==0 && n%100!=0) || n%400==0)) 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=18*365; //无论是怎么样的年份,18*365天一定会有,结果数只会比这个多不会比这个少;
       scanf("%d-%d-%d",&n,&y,&r);   // 注意输入格式!!!!
       if(fan(n) && y==2 && r==29) 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(y==1)
                    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;}}

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

你可能感兴趣的:(c语言,题目)