zoukankan      html  css  js  c++  java
  • 计算日期差值

    题目描述:

    有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天

    输入:

    有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

    输出:

    每组数据输出一行,即日期差值

    样例输入:
    20110412
    20110422
    样例输出:
    11
     1 #include<stdio.h>
     2 #define ISYEAP(x) (x%100!=0 && x%4==0 || x%400==0)? 1 : 0
     3 int dayofmonth[13][2]={
     4 0,0,
     5 31,31,
     6 28,29,
     7 31,31,
     8 30,30,
     9 31,31,
    10 30,30,
    11 31,31,
    12 31,31,
    13 30,30,
    14 31,31,
    15 30,30,
    16 31,31
    17 };
    18 struct Date{
    19 int day;
    20 int month;
    21 int year;
    22 void nextday()
    23 {
    24     day++;
    25     if(day>dayofmonth[month][ISYEAP(year)]){
    26         day = 1;
    27         month++;
    28         if(month>12)
    29         {
    30             year++;
    31             month=1;
    32         }
    33     }
    34 }
    35 };
    36 int buf[5001][13][32];
    37 int Abs(int x)
    38 {
    39     return x<0?-x:x;
    40 }
    41 int main()
    42 {
    43     Date tmp;
    44     int cnt=0;
    45     tmp.day = 1;
    46     tmp.month = 1;
    47     tmp.year = 0;
    48     while(tmp.year != 5001)
    49     {
    50         buf[tmp.year ][tmp.month ][tmp.day ]=cnt;
    51         tmp.nextday ();
    52         cnt++;
    53     }
    54     int d1,m1,y1;
    55     int d2,m2,y2;
    56     while(scanf("%4d%2d%2d",&y1,&m1,&d1)!=EOF){
    57         scanf("%4d%2d%2d",&y2,&m2,&d2);
    58         printf("%d
    ",Abs(buf[y2][m2][d2]-buf[y1][m1][d1]+1));
    59     }
    60     return 0;
    61 }

    PS:如果问题需要输出某个特定日期,是那年的第几天,则只需要将该日期与原点日期的天数减去那年元旦与原点日期天数。

  • 相关阅读:
    AtCoder Beginner Contest 113 D Number of Amidakuji
    UVA
    mt19937 -- 高质量随机数
    牛客网NOIP赛前集训营-提高组(第七场)C 洞穴
    牛客OI周赛4-提高组 C 战争(war)
    牛客OI周赛4-提高组 B 最后的晚餐(dinner)
    bzoj 4318 || 洛谷P1654 OSU!
    Tourists Codeforces
    bzoj 1791 [Ioi2008]Island 岛屿
    洛谷 P2231 [HNOI2002]跳蚤
  • 原文地址:https://www.cnblogs.com/rickhsg/p/3644674.html
Copyright © 2011-2022 走看看