日期类问题
回避细节, 预处理, 通用方法
#include<cstdio>
using namespace std;
int mTD[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
bool isLeapYear(int y) { return (y % 100 != 0 && y % 4 == 0) || y % 400 == 0; }
int getDays(int y, int m) {
if (m == 2) {
if (isLeapYear(y))return 29;
return mTD[2];
}
return mTD[m];
}
struct date {
int y, m, d;
void next() {
d++;
if (d>getDays(y, m)) {
d = 1;
++m;
}
if (m > 12) {
m = 1;
++y;
}
}
};
int buf[5001][13][32];
int main() {
//预处理
date d = { 0,1,1 }, d2;
int cnt = 1;
while (d.y != 5001) {
buf[d.y][d.m][d.d] = cnt++;
d.next();
}
//输入处理
while (~(scanf("%4d%2d%2d", &d.y, &d.m, &d.d))) {
scanf("%4d%2d%2d", &d2.y, &d2.m, &d2.d);
printf("%d\n", buf[d2.y][d2.m][d2.d] - buf[d.y][d.m][d.d] + 1);
}
return 0;
}