#40838: 解答 c++


hs210023@students.hshs.chc.edu ... (天底下最帥的那個男人)

學校 : 不指定學校
編號 : 274462
來源 : [39.9.190.55]
最後登入時間 :
2024-06-17 21:52:54
a263. 日期差幾天 -- 板橋高中練習題 | From: [27.247.62.93] | 發表日期 : 2024-06-14 19:20

為了解決這個問題,我們需要計算兩個日期之間的天數差。這可以通過將日期轉換為 "天數" 來實現,然後計算兩者之間的差異。以下是使用C++實現這個功能的程式碼:

 

C++ 程式碼

 

 
#include <iostream>
#include <cmath>
using namespace std;

// 判斷是否是閏年
bool isLeapYear(int year) {
    if (year % 4 == 0) {
        if (year % 100 == 0) {
            if (year % 400 == 0)
                return true;
            else
                return false;
        }
        else
            return true;
    }
    else
        return false;
}

// 計算從某年初到某月某日的天數
int daysFromStartOfYear(int year, int month, int day) {
    int daysPerMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    if (isLeapYear(year)) {
        daysPerMonth[1] = 29; // 閏年2月有29天
    }
    int days = 0;
    for (int i = 0; i < month - 1; ++i) {
        days += daysPerMonth[i];
    }
    days += day;
    return days;
}

// 計算從西元1年1月1日到某日期的總天數
int daysFromEpoch(int year, int month, int day) {
    int days = 0;
    for (int i = 1; i < year; ++i) {
        days += isLeapYear(i) ? 366 : 365;
    }
    days += daysFromStartOfYear(year, month, day);
    return days;
}

int main() {
    int year1, month1, day1;
    int year2, month2, day2;
    while (cin >> year1 >> month1 >> day1 >> year2 >> month2 >> day2) {
        int days1 = daysFromEpoch(year1, month1, day1);
        int days2 = daysFromEpoch(year2, month2, day2);
        cout << abs(days1 - days2) << endl;
    }
    return 0;
}

 

說明

 

  1. 判斷是否是閏年
    使用函數 isLeapYear 判斷給定年份是否是閏年。
  2. 計算從某年初到某月某日的天數
    使用函數 daysFromStartOfYear 計算從某年初到某日期的天數,考慮閏年的情況。
  3. 計算從西元1年1月1日到某日期的總天數
    使用函數 daysFromEpoch 計算從西元1年1月1日到某日期的總天數,這樣可以方便地計算兩個日期之間的天數差。
  4. 主程式
    在主程式中,不斷讀取輸入的兩個日期,計算並輸出兩個日期之間的天數差。使用 abs 函數來確保結果是正數。

 

測試

 

你可以將這段程式碼複製到本地的C++編譯器中進行測試,並輸入範例資料,檢查輸出結果是否正確。如果有任何問題或需要進一步的調整,請告訴我。
 
ZeroJudge Forum