ZeroJudge A263: 日期差幾天

給你兩個日期,問這兩個日期相差幾天。

範例測資

範例輸入範例輸出
輸入有多筆測資,每筆測資有兩行,每行有三個整數依序是年、月、日。輸入以 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

發佈留言