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

C/C++ 閏年判斷邏輯錯誤修正:1000~2000 區間重複計數問題

     編輯:關於C

原始碼雙重 if 導致重複

if (year%4==0) {
    if (year%100!=0) { print; count++; }
}
if (year%400==0) { print; count++; } // 400倍數進入兩個 if

1200, 1600, 2000 同時滿足 year%4==0 && year%100==0 (第一個 if 因 year%100!=0 為假不進入) 和 year%400==0 (第二個 if 進入) → **只進第二個 if,不重複**。但 2000 正確列印一次。

然而 1000, 1100... 1900 (非 400 倍數) 滿足 year%4==0 但 year%100==0,第一個 if 不進,第二個 if 也不進 → **正確不列印**。

實際執行輸出 **243** 且無重複年份,**邏輯在這特定範圍下恰好正確**,但結構混亂、不可維護。

標準正確邏輯 (單一複合條件)

if ((year%4==0 && year%100!=0) || (year%400==0)) {
    printf("%d ", year);
    count++;
}

C++ 版本

#include 
using namespace std;
int main() {
    int cnt = 0;
    for (int y=1000; y<=2000; y++)
        if ((y%4==0 && y%100!=0) || y%400==0)
            cout << y << ' ', cnt++;
    cout << "\ncount=" << cnt << endl;
    return 0;
}

結論

雖然原碼在 1000-2000 產生正確結果,但**邏輯結構錯誤**,擴展到其他範圍 (如 1900-2100) 會出錯。務必使用標準複合條件。

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