年月周星期計算年月日 C

2021-09-25 13:31:17 字數 2308 閱讀 2918

輸入年、月、第幾周、週幾,輸出對應的 年、月、日。

1.2.

1.週日到週六

2.周一到週日

這兩種不同的定義可能會導致不同的計算結果。這裡的**放入的是第一種定義的結果,若想改為第二種,需要調整**中的b[ ]和後續**。下面所述全部以第一種定義為基礎。

二、「第幾周」的定義

每週的第一周和最後一周一般不完整,如上圖(以週日-週六為一周為例):2023年2月的第一周從周四開始,第一周沒有週日、周

一、周二、週三;最後一周沒有周

四、周五、週六。

每個月份的週數有一定範圍,不存在「第0周」、「第7周」、「第8周」的說法。

主要是在搜尋相關問題時,發現基姆拉爾森計算公式的存在,利用該公式求出每月1號的星期數。根據求得的星期可以判斷輸入是否正確,例如:輸入2019 07 1 7(2023年7月第1周週日),是錯誤輸入,因為該月第一周沒有週日。

以輸入2019 07 3 2為例,首先計算2023年7月1日是星期一,計算第一周天數,計算第二週天數,計算第三週天數,累加之後判斷是否超過該月最大的天數,超過就返回0,未超過就計算出了號數。

週日到週六為一周:

#include

#include

using namespace std;

//基姆拉爾森計算公式計算某年某月某日對應的星期

int caculateweekday

(int yy, int mm, int d)

int iweek =

(d +

2* mm +3*

(mm +1)

/5+ yy + yy /

4- yy /

100+ yy /

400)%7

;return iweek +1;

}int a[

12]=,

};int b[8]

=;//判斷是否是閏年

int isleapyear

(int y)

int caculateday

(int yy, int mm, int w, int n)

else

if(n ==

7) days +=1;

else days += n +1;

if(days <=

0|| days > a[

isleapyear

(yy)

][mm -1]

)return0;

}return days;

}int main()

return0;

}輸入:2018121

7輸出:0

輸入:2019073

2輸出:2019-07

-16

周一到週日為一周

#include

#include

using namespace std;

int caculateweekday

(int yy, int mm, int d)

int iweek =

(d +

2* mm +3*

(mm +1)

/5+ yy + yy /

4- yy /

100+ yy /

400)%7

;return iweek +1;

}int a[

12]=,

};int b[8]

=;int isleapyear

(int y)

int caculateday

(int yy, int mm, int w, int n)

else

days += b[n]

- b[1]

+1;if

(days <=

0|| days > a[

isleapyear

(yy)

][mm -1]

)return0;

}return days;

}int main()

return0;

}輸入:2018121

7輸出:2018-12

-02輸入:2019073

2輸出:2019-07

-16

按照年月日星期分組

string daily to char query date,dd 自然日 string weekly to char query date,iw 自然周 string monthly to char query date,mm 自然月 string yearly to char query da...

計算特定年月日是星期幾

昨天去圖書館看到一道c語言上機題。如果2008年3月1日是星期四,那麼2008年1月1日是星期幾?這裡補充一下小學沒有學到的 測度 知識。8減1得幾?8到1幾個數?2到8幾個數?第乙個問題作差就好 8 1 7 第二個問題相信大學生都沒有思考過,應該是 8 1 1 8 第三個問題就會了,有很多解法,最...

C 根據年 月 日獲取星期幾

1 根據日期,獲得星期幾 年 月 日 星期幾,1代表星期一 7代表星期日 public static int getweekday int y,int m,int d c 的功能很強大,卻沒有直接提供面向漢字文化的開發傾向 比如我現在要說的獲取當前的星期我提供兩種方法 datetime.now.da...