給你兩個日期,問這兩個日期相差幾天。
範例測資
範例輸入 | 範例輸出 |
---|---|
輸入有多筆測資,每筆測資有兩行,每行有三個整數依序是年、月、日。輸入以 EOF 作為結束,題目保證不會有不符合的測資出現。 | 輸出兩個日期差幾天。 |
2011 10 19 2011 10 18 | 1 |
解題思路
將兩個日期換算成「天」這個最小單位。要注意的是需要判斷閏年出現的次數,也要判斷當前的月份需不需要計算閏年的多一天。最後輸出兩個天數相減的絕對值。
範例程式碼-ZeroJudge A263: 日期差幾天
#include <iostream>
using namespace std;
int main()
{
int y1, m1, d1;
int y2, m2, d2;
int month[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
while (cin >> y1 >> m1 >> d1 >> y2 >> m2 >> d2) {
int temp = d1;
int temp1 = d2;
int ld1, ld2;
if (m1 > 2) {
ld1 = (y1 / 4 - y1 / 100 + y1 / 400);
}
else {
ld1 = ((y1 - 1) / 4 - (y1 - 1) / 100 + (y1 - 1) / 400);
}
if (m2 > 2) {
ld2 = (y2 / 4 - y2 / 100 + y2 / 400);
}
else {
ld2 = ((y2 - 1) / 4 - (y2 - 1) / 100 + (y2 - 1) / 400);
}
d1 += y1 * 365 + ld1;
for (int i = 1; i < m1; i++) {
d1 += month[i];
}
d2 += y2 * 365 + ld2;
for (int i = 1; i < m2; i++) {
d2 += month[i];
}
cout << abs(d1 - d2) << endl;
}
return 0;
}
//ZeroJudge A263
//Dr. SeanXD