数日子
Time Limit: 1000MS Memory limit: 65536K
题目描述
按照公元纪年法,闰年被定义为能被 4 整除的年份,但是能被 100 整除而不能被 400 整除的年份除外,例如 1900 年就不是闰年。现在我们已知 2000 年 1 月 1 日为 星期六,你的任务是,对于给定的一个整数 n,写个程序计算并输出从 2000 年 1 月 1 日经过 n 天后的日期和该天是星期几。
输入
输入包含多组测试数据。每组测试数据只包含一个正整数 n (0 <= n <= 99999)。
输出
对于每组测试数据,输出只有一行,为 n 天后的日期和该天为星期几,输出格式为 “YYYY-MM-DD week-day”(不包含引号) 具体格式见样例输出。
示例输入
100
400
示例输出
2000-04-10 Monday
2001-02-04 Sunday
1 #include<stdio.h>
2 #include<
string.h>
3 char s[][
20]={
"Saturday",
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"};
4
5 int day_year(
int year)
6 {
7 if(year%
100==
0)
return year%
400==
0 ?
366:
365;
8 return year%
4==
0?
366:
365;
9 }
10 int day_month(
int month,
int year)
11 {
12 if(month==
2)
return day_year(year)==
366?
29:
28;
13 int d;
14 switch(month)
15 {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: d=
31;
break;
16 default :d=
30;}
17 return d;
18 }
19 int main ()
20 {
21 int n,y,m,d,w;
22
23 while(scanf(
"%d",&n)!=
EOF)
24 {
25 y=
2000;m=
1;d=
1;
26 w=n%
7;
27 while(n)
28 {
29 if(n>=
day_year(y))
30 {n=n-day_year(y);y++
;}
31 else if(n>=
day_month(m,y))
32 {n=n-day_month(m,y);m++
;}
33 else
34 {d=d+n;n=
0;}
35 }
36 printf(
"%d-d-d %s\n",y,m,d,s[w]);
37 }
38 return 0;
39 }
40
41
42
转载于:https://www.cnblogs.com/LK1994/archive/2013/03/23/2977553.html