輸入格式為 "年/月/日" 的日期,計算該日期是當年的第幾天。輸入多組數據,以 EOF 結束。
公曆閏年規則:
代碼實現:`(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)`
#include <stdio.h>
int main(void) {
int year, month, day;
int days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int day_of_year, i;
while (scanf("%d/%d/%d", &year, &month, &day) != EOF) {
day_of_year = 0;
// 累加前 (month-1) 個月的天數
for (i = 0; i < month - 1; i++)
day_of_year += days_in_month[i];
// 閏年且過了 2 月,加 1 天
if (((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) && month > 2)
day_of_year += 1;
day_of_year += day;
printf("%d\n", day_of_year);
}
return 0;
}
| 輸入 | 輸出 | 說明 |
|---|---|---|
| 2024/03/01 | 61 | 閏年,1月31天 + 2月29天 + 1天 |
| 2023/03/01 | 60 | 平年,1月31天 + 2月28天 + 1天 |
| 2000/12/31 | 366 | 閏年最後一天 |
| 1900/12/31 | 365 | 1900非閏年(能被100整除但不能被400整除) |
若需處理更大範圍日期(如公元前),需考慮儒略曆與格里曆切換問題。本題假設為標準公曆。