輸入年、月、第幾周、週幾,輸出對應的 年、月、日。
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...