题目描述
给定两个日期,求这两个日期之间的天数,如果两个日期连续规定他们之间的相差天数为两天。
输入格式:
输入两个日期,格式为NNNNYYRR
输出格式:
输出一行,即日期差值。
输入样例:
20150202
20160202
输出样例:
366
分析:
一个简单的思路,先确定两个日期的大小,取出年月日,小日期向大日期递增,每次天数加一,总差值加一。若天数超过了本月的最大天数,则月份加一,如果当前月份达到了十二,则年份加一,同时判断闰年和平年,月份置一,天数置一。
#include <iostream>
using namespace std;
void Compare(int &minDate, int &maxDate) {
if (minDate > maxDate) {
int temp = minDate;
minDate = maxDate;
maxDate = temp;
}
}
bool leapYear(int year) {
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
return true;
else
return false;
}
void setMonth(int year, int month[]) {
if (leapYear(year))
month[2] = 29;
else
month[2] = 28;
}
int dateDifference(int month[], int year1, int year2, int month1, int month2, int day1, int day2) {
int sumDays = 1;
while (year1 != year2 || month1 != month2 || day1 != day2) {
if (day2 <= month[month2]) {
day2++;
sumDays++;
} else {
if (month2 < 12) {
month2++;
day2 = 1;
} else {
year2++;
setMonth(year2, month);
month2 = 1;
day2 = 1;
}
}
}
return sumDays;
}
int main() {
int minDate;
int maxDate;
cin >> minDate >> maxDate;
int sumDays;
int month[13];
month[1] = 31;
month[3] = 31;
month[4] = 30;
month[5] = 31;
month[6] = 30;
month[7] = 31;
month[8] = 31;
month[9] = 30;
month[10] = 31;
month[11] = 30;
month[12] = 31;
Compare(minDate, maxDate);
int maxYear = maxDate / 10000;
int minYear = minDate / 10000;
int month1 = (maxDate / 100) % 100;
int month2 = (minDate / 100) % 100;
int day1 = maxDate % 100;
int day2 = minDate % 100;
setMonth(minYear, month);
sumDays = dateDifference(month, maxYear, minYear, month1, month2, day1, day2);
cout << sumDays << endl;
return 0;
}