#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 : 0
int 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;
}
日期问题 计算两个日期相距多少天
最新推荐文章于 2023-12-01 17:18:01 发布