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

同一算法的 C、Python、JavaScript 三語言實現對比:統計 20 世紀每月 1 日星期日數量

     編輯:關於C

問題描述

已知 1900-01-01 是星期一,計算 1901-01-01 至 2000-12-31 間,有多少個月的 1 號是星期日。需處理閏年規則:

  • 能被 4 整除且不能被 100 整除 → 閏年
  • 能被 400 整除 → 閏年

C 語言版(標準、高性能)

#include 
#include 

bool is_leap(int y) {
    return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}

int main() {
    int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    int leap_days[12]  = {31,29,31,30,31,30,31,31,30,31,30,31};
    int *days = month_days;

    int weekday = 1;  // 1900-01-01 = Monday (0=Sun..6=Sat)
    int count = 0;

    for (int y = 1900; y <= 2000; y++) {
        days = is_leap(y) ? leap_days : month_days;
        for (int m = 0; m < 12; m++) {
            if (y >= 1901 && weekday == 0) count++;  // Sunday
            weekday = (weekday + days[m]) % 7;
        }
    }
    printf("%d\n", count);  // 171
    return 0;
}

Python 版(簡潔、標準庫豐富)

import calendar

count = 0
for year in range(1901, 2001):
    for month in range(1, 13):
        # calendar.weekday: Monday=0 ... Sunday=6
        if calendar.weekday(year, month, 1) == 6:
            count += 1
print(count)  # 171

JavaScript 版(瀏覽器/Node 通用、可視化友好)

function isLeap(y) {
    return (y % 4 === 0 && y % 100 !== 0) || (y % 400 === 0);
}
const days = [31,28,31,30,31,30,31,31,30,31,30,31];
let weekday = 1; // 1900-01-01 Monday
let count = 0;

for (let y = 1900; y <= 2000; y++) {
    const d = isLeap(y) ? [...days] : days;
    d[1] = isLeap(y) ? 29 : 28;
    for (let m = 0; m < 12; m++) {
        if (y >= 1901 && weekday === 0) count++;
        weekday = (weekday + d[m]) % 7;
    }
}
console.log(count); // 171

三語言特性對比

維度CPythonJavaScript
代碼行數~25~8~18
運行速度極快 (ms)快 (ms)快 (ms)
日期庫手寫邏輯calendar 標準庫手寫/Date 對象
部署編譯執行解釋執行瀏覽器/Node 直跑
調試GDB/LLDBpdb/IDEDevTools/斷點
適用場景嵌入式/高性能/系統級腳本/數據分析/原型Web/全棧/可視化

驗證結果

三版本均輸出 171,與 Project Euler Problem 19 答案一致。

總結

同一邏輯用不同語言實現,能深刻體會「工具選型取決於場景」:C 追求極致性能與資源控制,Python 追求開發效率與生態豐富,JavaScript 追求普適性與前端集成。多語言並用,拓寬技術視野。

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