計算某年的第一天是星期幾的公式! -- 編程愛好者論壇存檔帖

首先,利用你的公式編一簡單程序:main(){ int year;/*年份*/int w;/*星期幾*/scanf ("%d",&year);w=((year-1)+ (year-1)/4-(year-1)/100+(year-1)/400+1)%7;printf("%d
",w);getch();}運行時,輸入1,得到結果1。即,如果這個公式正確,公元1年的第一天是星期一。這是一個計算前提,必須先搞清楚。然後要知道閏年的規定:凡是年份能夠被4整除、且不能被100整除的是閏年;凡是年份能被400整除的也是閏年;除此以外的年份都不是閏年。第三要知道閏年366天、平年365天,不知道這個的得重新上小學。有了這三個基礎,就好辦了。公元1年第一天(下文簡稱"起始天")之後,要計算某天是星期幾,只要用「這天與起始天之差」,與7求余,當餘數為0,則這天與起始天星期幾相同,也是星期一;否則,這個餘數+1就是這天的星期幾。假設這個程序時輸入年份year,則該年的第一天距離起始天的差是:(year-1)*365+(公元1年到公元year-1年內的閏年個數(每個閏年多一天啊!))。。。。。。。(1)公元1年到公元year-1年內的閏年個數的計算:根據閏年規定,反過來考慮可以知道:大致每4年有1個閏年,這樣算得到:公元1年到公元year-1年內的閏年個數=(year-1)/4但,每一百年要扣掉1個閏年,修正一下得到:公元1年到公元year-1年內的閏年個數=(year-1)/4-(year/100)扣多了!每400年又要增加一個閏年,再次修正得到:公元1年到公元year-1年內的閏年個數=(year-1)/4-(year/100)+(year/400)這次準確了。代入(1)得到年份year第一天距離起始天的差是:(year-1)*365+(year-1)/4-(year/100)+(year/400)這天是星期幾?前面說過,是這個差與7求余+1:[(year-1)*365+(year-1)/4-(year/100)+(year/400)]%7+1這個末尾的1可以放到被除數裡面,即:[(year-1)*365+(year-1)/4-(year/100)+(year/400)+1] %7=[(year-1)*(364+1)+(year-1)/4-(year/100)+(year/400)+1] %7=[(year-1)*364+(year-1)+(year-1)/4-(year/100)+(year/400)+1] %7364是7的倍數,year*364也一定是7的倍數,所以year*364可以去掉,這就得到了最後的計算式:=[(year-1)+(year-1)/4-(year/100)+(year/400)+1] %7這個[ ]內最後的1,可以看成是新年的第1天。更一般地,year年度的第D天是星期幾?可以用下式計算:[(year-1)+(year-1)/4-(year/100)+(year/400)+D] %7
推薦閱讀:

編程與邏輯思維
最為經典的計算機編程語言之一 C語言
Scratchapixel舉步維艱,尋求贊助或投放廣告
Learn to code from good webs

TAG:編程 | 愛好 | 公式 | 計算 | 星期 | 一天 | 論壇 |