ZeroJudge A263: 日期差幾天

題目敘述

題目採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;
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge M932: 蜜蜂觀察