-
有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天
看看两个日期相同你的输出是1还是0,是0就不能AC了。有点坑啊。
题目描述:
-
输入:
-
有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD
-
输出:
-
每组数据输出一行,即日期差值
-
样例输入:
-
20110412 20110422
-
样例输出:
-
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,不是为false bool 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; }