首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

杭電 OJ 2005:日期轉年內天數 - C 語言實現與閏年判斷

     編輯:關於C語言

題目描述

輸入格式為 "年/月/日" 的日期,計算該日期是當年的第幾天。輸入多組數據,以 EOF 結束。

核心邏輯

  1. 預先定義平年每月天數數組
  2. 累加輸入月份之前所有月份的天數
  3. 判斷閏年且月份大於 2 月時,額外加 1 天
  4. 最後加上當月的日數

閏年判斷規則

公曆閏年規則:

  • 能被 4 整除但不能被 100 整除 → 閏年
  • 能被 400 整除 → 閏年
  • 其餘為平年

代碼實現:`(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/0161閏年,1月31天 + 2月29天 + 1天
2023/03/0160平年,1月31天 + 2月28天 + 1天
2000/12/31366閏年最後一天
1900/12/313651900非閏年(能被100整除但不能被400整除)

擴展思考

若需處理更大範圍日期(如公元前),需考慮儒略曆與格里曆切換問題。本題假設為標準公曆。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved