淼姐有时候会很糊涂,她常常不知道自己的生日是星期几?请你帮她编写一个程序,只要输入年月日,就能知道那天是星期几。
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]);
}