#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;
}
isLeapYear 判斷給定年份是否是閏年。daysFromStartOfYear 計算從某年初到某日期的天數,考慮閏年的情況。daysFromEpoch 計算從西元1年1月1日到某日期的總天數,這樣可以方便地計算兩個日期之間的天數差。abs 函數來確保結果是正數。
為了解決這個問題,我們需要計算兩個日期之間的天數差。這可以通過將日期轉換為 "天數" 來實現,然後計算兩者之間的差異。以下是使用C++實現這個功能的程式碼:
C++ 程式碼
#include #include 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; }
說明
判斷是否是閏年:
使用函數isLeapYear判斷給定年份是否是閏年。 計算從某年初到某月某日的天數:
使用函數daysFromStartOfYear計算從某年初到某日期的天數,考慮閏年的情況。 計算從西元1年1月1日到某日期的總天數:
使用函數daysFromEpoch計算從西元1年1月1日到某日期的總天數,這樣可以方便地計算兩個日期之間的天數差。 主程式:
在主程式中,不斷讀取輸入的兩個日期,計算並輸出兩個日期之間的天數差。使用abs函數來確保結果是正數。
測試
你可以將這段程式碼複製到本地的C++編譯器中進行測試,並輸入範例資料,檢查輸出結果是否正確。如果有任何問題或需要進一步的調整,請告訴我。AI