统计日期天数及拓展使用

统计日期的天数,主要考虑闰年情况。

思路:

  • 每一年的1、3、5、7、8、10、12月都是31天
  • 每一年的4、6、9、11月都是30天
  • 润年的2月有29天,其他年的2月都为28天
  • 润年有2种情况:
  1. 能被4整除但不能被100整除(如2004年就是闰年,1800年不是)
  2. 能被400整除(如2000年是闰年)

题目1:输入一个日期,输出是当前年的第几天。

 1 #include <iostream>
 2 #include<stdio.h>
 3 using namespace std;
 4 
 5 int isrun(int year)
 6 {
 7     if(((year%4==0)&&(year%100!=0))||year%400==0) return 1;
 8     else return 0;
 9 }
10 int daySum(int year,int month,int day)
11 {
12     int sum=0;
13     int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
14     if(!isrun(year)) months[2]=28;
15     else months[2]=29;
16     for(int i=1;i<=month-1;i++)
17     {
18         sum=sum+months[i];
19     }
20     sum+=day;   //year年的第几天
21     return sum;
22 }
23 int main()
24 {
25     int year,month,day;
26     scanf("%d %d %d",&year,&month,&day);
27     cout<<daySum(year,month,day)<<endl;
28 }

题目2:输入两个日期,输出这两个日期间隔的天数。

思路:

  • 函数daySum(date): 输入为date的年月日,输出为date距离1年1月1日的天数。
  1. 计算出year年的第几天day(n)
  2. 统计1至year-1年的天数day(n-1),平年为365,闰年为366
  3. 总天数=day(n)+day(n-1)
  • 日期A与B间隔天数,即daySum(A)-daySum(B)的绝对值。
 1 #include <iostream>
 2 #include<stdio.h>
 3 using namespace std;
 4 
 5 int isrun(int year)
 6 {
 7     if(((year%4==0)&&(year%100!=0))||year%400==0) return 1;
 8     else return 0;
 9 }
10 int daySum(int year,int month,int day)
11 {
12     int sum=0;
13     int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
14     if(!isrun(year)) months[2]=28;
15     else months[2]=29;
16     for(int i=1;i<=month-1;i++)
17     {
18         sum=sum+months[i];
19     }
20     sum+=day;   //year年的第几天
21     sum+=(year-1)*365+year/4-year/100+year/400;  //加上1到year-1的天数
22     return sum;
23 }
24 int abs(int num)   //绝对值函数
25 {
26     if(num<0) return -num;
27     return num;
28 }
29 int main()
30 {
31     int year1,month1,day1,year2,month2,day2;
32     scanf("%d %d %d",&year1,&month1,&day1);
33     scanf("%d %d %d",&year2,&month2,&day2);
34     cout<<abs(daySum(year1,month1,day1)-daySum(year2,month2,day2))<<endl;
35 }
原文地址:https://www.cnblogs.com/lijuanhu321/p/9787968.html