• 统计日期天数及拓展使用


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

    思路:

    • 每一年的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 }
  • 相关阅读:
    [图论入门]图的储存
    [五年CSP三年模拟]洛谷2020初赛模拟赛分析
    [五年CSP三年模拟]CSP2020-J冲刺
    [算法入门]KMP算法
    [算法入门]单调队列
    有关递推与递归的回顾
    软工实践个人总结
    第02组 每周小结 (3/3)
    第02组 每周小结 (2/3)
    第02组 每周小结 (1/3)
  • 原文地址:https://www.cnblogs.com/lijuanhu321/p/9787968.html
Copyright © 2020-2023  润新知