题目1096:日期差值 机试指南6

来源:互联网 发布:中国工业实力数据 编辑:程序博客网 时间:2024/05/29 14:21

看看两个日期相同你的输出是1还是0,是0就不能AC了。有点坑啊。

题目描述:

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

输入:

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

输出:

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

样例输入:
2011041220110422
样例输出:
11
#include <iostream>#include <stdio.h>#include <string>#include <string.h>#include <algorithm>using namespace std;int GetYear(int &iDate){return iDate/10000;}int GetMonth(int &iDate){return (iDate%10000)/100;}int GetDay(int &iDate){return iDate%100;}//判断是否是闰年,是为true,不是为falsebool IsRunNian(int iYear){if (0 == iYear%400){return true;}if (0 == iYear%4 && 0 != iYear%100){return true;}return false;}//是否31天的大月bool IsBigMonth(int &iMonth){return (1 == iMonth || 3 == iMonth|| 5 == iMonth|| 7 == iMonth|| 8 == iMonth|| 10 == iMonth || 12 == iMonth);}//获取一个月的天数int GetMonthDays(int &iYear, int &iMonth){if (2 != iMonth){if (IsBigMonth(iMonth)){return 31;}return 30;}else{if (IsRunNian(iYear)){return 29;}else{return 28;}}}//获取一个日期包含的天数int GetDateDays(int &iDate){int iDayCount = 0;int i=0;//年包含天数int iYear = GetYear(iDate);for (i = 1; i != iYear; i++){if (IsRunNian(i)){iDayCount += 366;}else {iDayCount += 365;}}//月包含天数int iMonth = GetMonth(iDate);for (i = 1; i != iMonth; i++){iDayCount += GetMonthDays(iYear, i);}iDayCount += GetDay(iDate);return iDayCount;}int main(){ int iDate1;int iDate2;while (scanf("%d", &iDate1)!=EOF){cin>>iDate2;if (iDate1 < iDate2){//用1来存放比较大的日期int iTem = iDate1;iDate1 = iDate2;iDate2 = iTem;}int iDayMinus = GetDateDays(iDate1) - GetDateDays(iDate2);printf("%d\n", iDayMinus+1);}return 0;}
0 0