总结最近学习成果09-日期的计算题

1)根据距离2000-1-1的天数,算出日期
2)计算自己活了多少天
3)题目:输入某年某月某日,判断这一天是这一年的第几天?
吐槽:题目不难,但是真的很烦人

/*
思路:首先抽象出两个函数 判断某年是不是闰年,通过得到年月日计算这是本年的第几天
第一问:起始年是2000年 首先看拿到的日期days是不是大于366  年份加一 然后日期数days-366  通过判断是不是闰年的函数控制减量s是365还是366
            直到days不大于s这样就把年数算完了  也拿到了还剩下的days   判断days是否大于一月天数months[i]  i+1  天数剪掉当月天数
            直到days不大于某个月天数months[i]  也拿到剩下的天数  那就是日期数
            输出year i+1  days   i+1是因为i从0开始计数
第二问:分三部分  出身年活的天数+到2019年为止的天数+2019已经过了天数    当出生年小于现在年份的时候,
            直接用365+IsRun(bYear)-出生年日期前的天数GetDay(bYear,bMonth,bDay)    当bYear<nYear 累加365和闰年那天   GetDay(nYear,nMonth,nDay)
            如果出生年和现在是同一年  只需要用现在日期是本年第几天-出生日期是本年第几天就行
第三问:编写函数GetDay()  形式参数就是输入的年月日  只要将月份一个个加上去就行了  循环次数是月份数少一
*/
#include<stdio.h>
int IsRun(int year){
      if (year % 4 == 0 && year != 100 || year % 400 == 0){
            return 1;
      }
      else{
            return 0;
      }
}
int GetDay(int year,int month,int day){
      int s = 0;
      int months[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
      months[1] += IsRun(year);
      for (int i = 0; i < month-1; i++){//这里判断条件不能使用12 因为并不是加上一整年  而是循环加上你给定的月份-1
            s += months[i];
      }
      s += day;
      return s;
}
void Day(int days){
      int year = 2000;
      int month = 1;
      int day = 1;
      int s = 366;//因为2000年是闰年
      while (days > s){
            if (IsRun(year) == 1){
                  s = 366;
            }
            else{
                  s = 355;
            }
            year++;
            days -= s;
      }
      int months[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
      months[1] += IsRun(year);
      int i = 0;
      while (days > months[i]){
            i++;
            days -= months[i++];
      }
      printf("%d %d %d",year,i+1,days);
}
int lives(){
      int bYear =1996;
      int bMonth = 11;
      int bDay = 4;
      int nYear = 2019;
      int nMonth = 3;
      int nDay = 15;
      int s = 0;
      if (bYear < nYear){
            //1996-1997多少天
            s += 365 + IsRun(bYear);
            s -= GetDay(bYear, bMonth, bDay);
            bYear++;
            //1997-2018多少天
            while (bYear < nYear){
                  s += 365 + IsRun(bYear++);
            }
            //2019已经多少天
            s += GetDay(nYear, nMonth, nDay);
      }
      else if (bYear == nYear){
            s += GetDay(nYear, nMonth, nDay);
            s -= GetDay(bYear, bMonth, bDay);
      }
      return s;
}
int main(){
      //Day(367);
      /*int k = GetDay(2019, 3, 15);
      printf("%d",k);*/
      printf("%d", lives());
      return 0;
}

猜你喜欢

转载自blog.csdn.net/RyanXTY/article/details/89035746