首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

高斯日記日期計算:C 語言實現與閏年邏輯修正

     編輯:程式設計疑難解答

題目背景

高斯出生於 1777-04-30,日記用整數表示出生後的天數。已知 5343 對應 1791-12-15,求 8113 對應的日期(博士學位日)。

原代碼問題分析

提交的 C 代碼邏輯混亂,主要問題:

  • 閏年判斷錯誤:(a%100)==0&&(a%400)==0 應為 (year%4==0 && year%100!=0) || year%400==0。
  • 日期推算混淆:將總天數直接除以 365 估算年份,未正確扣除閏日,導致年份偏移。
  • 月份天數硬編碼錯誤:未區分平年/閏年 2 月天數,且 5-12 月累積天數計算有誤。

正確算法思路

  1. 從基準日(1777-04-30)開始,逐年遞減天數,直到剩餘天數小於該年總天數。
  2. 判斷目標年份是否閏年,確定 2 月天數。
  3. 遍歷月份累減天數,確定月、日。

關鍵修正代碼片段

// 正確閏年判斷
bool isLeap(int y) {
    return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}

// 核心邏輯
int days = 8113; // 目標天數
int year = 1777, month = 4, day = 30;
// 先處理 1777 年剩餘天數...
// 之後逐年遞減...
// 最後在目標年內按月遞減確定月日

參考答案

經正確計算,8113 天對應 1799-08-01。詳見 CSDN 博客完整解析:高斯日記問題詳細解法。

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