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

    题目描述:

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

    输入:

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

    输出:

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

    样例输入:
    20110412
    20110422
    样例输出:
    11
    来源:
    2009年上海交通大学计算机研究生机试真题
    #include <iostream>
    using namespace std;
    
    #define ISYEAR(x) x%100 != 0 && x%4 == 0 || x%400 == 0 ? 1:0
    
    int dayOfMonth[13][2]={//声明一年中所有的月份的天数,包括平年,闰年
        0,0,
        31,31,
        28,29,
        31,31,
        30,30,
        31,31,
        30,30,
        31,31,
        31,31,
        30,30,
        31,31,
        30,30,
        31,31
    };
    
    struct Date{
        int Day;
        int Month;
        int Year;
        void nextDay(){//下一天
            Day++;
            if (Day > dayOfMonth[Month][ISYEAR(Year)])//天数超过相应月份的天数?
            {
                Day=1;//天数变为1,月份+1
                Month++;
                if (Month > 12)//月份超过12?
                {
                    Month=1;
                    Year++;
                }
            }
        }
    };
    
    int buf[5000][13][32];//保存预处理的天数
    //空间换时间
    int Abs(int x){
        return x>0 ? x : -x;
    }
    
    int main(){
        Date tmp;//基准
        int cnt=0;//天数计算
        tmp.Day=1;
        tmp.Month=1;
        tmp.Year=0;
        while(tmp.Year <= 5001){//预先吧所有的天数都计算,保存起来
            buf[tmp.Year][tmp.Month][tmp.Day]=cnt;//将该日与0年1月1日的天数差保存起来
            tmp.nextDay();//计算下一天
            cnt++;//计数器累加,每经过一天计数器即+1,代表与原点的日期间隔又增加了一天
        }
        int d1,m1,y1;
        int d2,m2,y2;
        //进行多组数据的计算----多组
        while(scanf("%4d%2d%2d", &y1, &m1, &d1) != EOF) //此处注意对于格式的控制 
        {
            //当日期1输入正确时,才进行日期2的读取
            scanf("%4d%2d%2d", &y2, &m2, &d2);
            cout << Abs(buf[y2][m2][d2] - buf[y1][m1][d1] + 1) << endl;
        }
        return 0;
    }
    View Code

    1.空间换时间

    2.找一个基准时间

    3.scanf(“%d”,&m)!=eof 正确输入;多组数据处理

  • 相关阅读:
    log4j2 标签解析
    7.3
    work-7.2
    爬取豆瓣上某个用户标记的想读的或者读过的图书信息
    python爬虫程序打包为exe程序并在控制台下运行
    爬取任意两个用户在豆瓣上标记的想读的图书信息的交集
    解决c# progressBar更新出现界面假死
    数据库死锁(大神请路过)
    Excel的下载和读取,部分代码(大神请路过)
    大数据缓存:redis
  • 原文地址:https://www.cnblogs.com/ysugyl/p/6240839.html
Copyright © 2011-2022 走看看