題目敘述
題目採EOF收測資。每個測資有兩行,每一行有三個正整數分別代表年、月、日,要求算出這兩個日期差了幾天。
範例輸入
2011 10 19
2011 10 18
範例輸出
1
解題思路
將兩個日期換算成「天」這個最小單位。要注意的是需要判斷閏年出現的次數,也要判斷當前的月份需不需要計算閏年的多一天。最後輸出兩個天數相減的絕對值 (不需判斷大小) 即可。
解題程式碼如下 (僅供參考):
#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;
}
留言
張貼留言