给定两个日期,求出两个日期的差值,如果两个日期是连续的,则规定它们之间的天数为两天。
样例输入
20130101
20130105
样例输出
5
#include <iostream>
#include <string.h>
using namespace std;
bool isLeapYear(int year) {
if (year%400==0 || (year%4==0 && year%100!=0)) {
return true;
}
return false;
}
void split(int date, int &y, int &m, int &d) {
y = date/10000;
m = (date%10000)/100;
d = date%100;
}
int dayOfYear(int date) {
int year, month, day;
int res = 0;
split(date, year, month, day);
if (isLeapYear(year)) {
switch(month) {
case 12:
res += 30;
case 11:
res += 31;
case 10:
res += 30;
case 9:
res += 31;
case 8:
res += 31;
case 7:
res += 30;
case 6:
res += 31;
case 5:
res += 30;
case 4:
res += 31;
case 3:
res += 29;
case 2:
res += 31;
case 1:
res += day;
break;
}
} else {
switch(month) {
case 12:
res += 30;
case 11:
res += 31;
case 10:
res += 30;
case 9:
res += 31;
case 8:
res += 31;
case 7:
res += 30;
case 6:
res += 31;
case 5:
res += 30;
case 4:
res += 31;
case 3:
res += 28;
case 2:
res += 31;
case 1:
res += day;
break;
}
}
return res;
}
int main() {
int date1, y1, m1, d1;
int date2, y2, m2, d2;
cin >> date1;
cin >> date2;
if (date1 > date2) {
date1 = date1 ^ date2;
date2 = date1 ^ date2;
date1 = date1 ^ date2;
}
split(date1, y1, m1, d1);
split(date2, y2, m2, d2);
int res = 1;
for (int i = y1; i < y2; i++) {
if (isLeapYear(i)) {
res += 366;
} else {
res += 365;
}
}
res -= dayOfYear(date1);
res += dayOfYear(date2);
cout << res << endl;
return 0;
}