日期——1. 日期插值
2020-06-23 本文已影响0人
辘轳鹿鹿
题目描述
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
输入描述:
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出描述:
每组数据输出一行,即日期差值
示例1
输入
20110412
20110422
输出
11
解题心得:
- 闰年的判断规则为Year%100!=0&&Year%4==0||Year%100==0
- 如果超时,可以选择用空间换时间的策略。比如像本题一样,将答案预先保存在数组里。
- 输入技巧:使用%4d来读取该八位数的前4位并赋值给代表年的变量
#include <stdio.h>
#include <stdlib.h>
#define isrun(x) (x%4==0&&x%100!=0)||(x%400==0)?1:0
struct Date{
int year;
int month;
int day;
}tmp;
int buf[5001][13][32];
int MonthOfDay[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};
void NextDAY(){
tmp.day++;
if(tmp.day>MonthOfDay[tmp.month][isrun(tmp.year)]){
tmp.day=1;
tmp.month++;
}
if(tmp.month>12){
tmp.month=1;
tmp.year++;
}
}
int main()
{
int cnt=0;
tmp.year=0;
tmp.month=1;
tmp.day=1;
while(tmp.year!=5001){
buf[tmp.year][tmp.month][tmp.day]=cnt;
//printf("%d %d %d %d\n",tmp.year,tmp.month,tmp.day,buf[tmp.year][tmp.month][tmp.day]);
NextDAY();
cnt++;
}
int yy1,mm1,dd1,yy2,mm2,dd2;
while(scanf("%4d%2d%2d",&yy1,&mm1,&dd1)!=EOF){
scanf("%4d%2d%2d",&yy2,&mm2,&dd2);
printf("%d\n",abs(buf[yy1][mm1][dd1]-buf[yy2][mm2][dd2])+1);
}
return 0;
}