前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >日期差值

日期差值

作者头像
用户1631856
发布2018-04-12 11:39:54
1.1K0
发布2018-04-12 11:39:54
举报
文章被收录于专栏:老秦求学

题目描述:

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

输入:

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

输出:

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

样例输入:

代码语言:javascript
复制
20110412
20110422

样例输出:

代码语言:javascript
复制
11

来源:2009年上海交通大学计算机研究生机试真题

代码语言:javascript
复制
#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;
}

1.空间换时间

2.找一个基准时间

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-01-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档