日期问题 计算两个日期相距多少天

来源:互联网 发布:淘宝怎么创建子账号 编辑:程序博客网 时间:2024/05/23 23:47
#include <iostream>#include <vector>#include <stdio.h>#include <algorithm>#include <iomanip>#include <string>#include <cstdio>#include <string.h>#include <set>#include <cmath>#include <map>using namespace std;/*    把原区间问题同意到起点确定的区间问题上去    我们不妨把问题统一到特定日期与一个原点时间(如0000年1月1日)的天数差    把问题统一到特定日期之间的天数差时,我们只需要将他们与原点日期的天数差相减,    便能得到这两个特定日期之间的天数差(必要时加绝对值)*/#define ISYEAP(x) x % 100 != 0 && x % 4 == 0 || x % 400 == 0 ? 1 : 0int MonthDay[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 > MonthDay[Month][ISYEAP(Year)]){            Day = 1;            Month++;            if(Month > 12){                Month = 1;                Year ++;            }        }    }};int buf[5001][13][32]; // 保存预处理的天数int Abs(int x) {    return x < 0 ? -x : x;}int main(){freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);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;        tmp.nextDay();        cnt++;    }    int year1, month1, day1;    int year2, month2, day2;    scanf("%4d%2d%2d", &year1, &month1, &day1);    scanf("%4d%2d%2d", &year2, &month2, &day2);    cout << Abs(buf[year1][month1][day1] - buf[year2][month2][day2] )+ 1;    //cout << ans << endl;    return 0;}

0 0
原创粉丝点击