淼姐有時候會很糊塗,她常常不知道自己的生日是星期幾?請你幫她編寫一個程式,隻要輸入年月日,就能知道那天是星期幾。
Input
輸入一個日期,包括年、月、日。
Output
輸出這個日期是星期幾。
Sample Input
1 1 1
2 1 1
2006 7 10
Sample Output
Monday
Tuesday
Monday
Hint
1、 已知公元1 年1 月1 日是星期一 2、 算法提示:如果輸入的是2006 年3 月12 日,計算方法是 (1) 先計算從公元0001 年初(0001-1-1)到2005 年末(2005-12-31)共多少天,注意其中有閏年,閏年是366 天,平年是365 天。閏年的判斷條件滿足: (( year%40 && year%100!=0 )||(year%4000)) (2) 然後再計算2006 年1 月1 日到2006-3-12 是多少天。注意同樣判斷本年度是否閏年, 即二月份是28 天還是29 天。 (3) 上述兩部分相加即從公元0001 年初(0001-1-1)到2006 年末(2006-3-12)的天數, 用該天數模7(total%7)即得到星期數。
(忽略羅馬教皇事件,若不懂此事件,不用管此括号内提示!)
#include "stdio.h"
int main()
{
int y, m, d;
int n = 0, i; //一共有n天
int a[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char b[7][100] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thurday", "Friday", "Saturday"};
scanf("%d%d%d", &y, &m, &d);
for(i = 1; i <= y; i++)
{
if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))
n++;//判斷閏年的個數隻要是閏年都會加1,但是沒有判斷是否過2月29号
}
if((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
{
if(m > 2)
;
else if(m == 2 && d == 29)
;
else
n--;
}//判斷是否過2月29号
n = 365 * (y - 1) + n + d; //計算除月份的日子數
for(i = 1; i < m; i++)
{
n += a[i - 1];
}
n = n % 7;
printf("%s", b[n]);
}