本文主要是介绍【日期问题】九度OJ 1096:日期差值,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、题目内容
题目描述:
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
输入:
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
输出:
每组数据输出一行,即日期差值
样例输入:
20110412
20110422
样例输出:
11
二、代码及注释
#include<stdio.h>
#define ISYEAP(x) x%100!=0 && x%4==0 || x%400==0 ?1:0
using namespace std;
/*
思想:设定一个源点时间(如0000年1月1日),计算将两个日期的日期距离源点日期的时间差,
存入数组中,接着计算差值即可(必要时加绝对值)
*/
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 Year;int Month;int Day;//天数增加动态函数void nextDay(){Day++;if(Day>dayofMonth[Month][ISYEAP(Year)]){Day=1;Month++;if(Month>12){Month=1;Year++;}}}
};
int Abs(int x){return x<0?-x:x;
}
int buf[5001][13][32];
int main(){Date tmp;int cnt=0;//统计该日期到0000年1月1日的天数tmp.Year=0;tmp.Month=1;tmp.Day=1;while(tmp.Year!=5001){buf[tmp.Year][tmp.Month][tmp.Day]=cnt;tmp.nextDay();cnt++;}int y1,m1,d1;int y2,m2,d2;while(scanf("%4d%2d%2d",&y1,&m1,&d1)!=EOF){scanf("%4d%2d%2d",&y2,&m2,&d2);printf("%d\n",Abs(buf[y1][m1][d1]-buf[y2][m2][d2])+1);}
}
这篇关于【日期问题】九度OJ 1096:日期差值的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!