日期——1. 日期插值

2020-06-23  本文已影响0人  辘轳鹿鹿

上海交通大学复试日期差值问题

题目描述

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

输入描述:

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

输出描述:

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

示例1

输入

20110412
20110422

输出

11

解题心得:

#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;
}
上一篇 下一篇

猜你喜欢

热点阅读