日历问题

日历问题

题目描述

在我们现在使用的日历中, 闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100 不是闰年,而 1600, 2000 和 2400是闰年。 给定从公元2000年1月1日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几。

 

输入

输入一行,每行包含一个正整数,表示从2000年1月1日开始逝去的天数。数据保证结果的年份不会超过9999。

 

输出

输出一行,该行包含对应的日期和星期几。格式为“YYYY-MM-DD DayOfWeek”, 其中 “DayOfWeek” 必须是下面中的一个: "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" 或 "Saturday“。

 

样例输入

1

 

样例输出

2000-01-02 Sunday

AC:
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
 6 int year_day(int year)//计算是闰年还是平年
 7 {
 8     if (year%400==0 || (year%4==0 && year%100!=0))
 9         return 366;
10     else
11         return 365;
12 }
13 void calendar(int day)//计算日期
14 {
15     int a=2000;
16     while (day>=0)
17     {
18         day-=year_day(a);
19         a++;
20     }
21     day+=year_day(a-1);
22     printf("%d-",a-1);
23     if (year_day(a-1)==366)
24         month[1]=29;
25     int x=0;
26     while (day>month[x])
27     {
28         day-=month[x];
29         x++;
30     }
31     if (x<9)
32         printf("0");
33     printf("%d-",x+1);
34     if (day<10)
35         printf("0");
36     printf("%d ",day+1);
37 }
38 int main()
39 {
40     int day;
41     scanf("%d",&day);
42     calendar(day);
43     switch (day%7)//枚举每一种情况
44     {
45         case 0:printf("Saturday\n");break;
46         case 1:printf("Sunday\n");break;
47         case 2:printf("Monday\n");break;
48         case 3:printf("Tuesday\n");break;
49         case 4:printf("Wednesday\n");break;
50         case 5:printf("Thursday\n");break;
51         case 6:printf("Friday\n");break;
52     }
53     return 0;
54 }
calendar

 

posted @ 2019-06-21 15:13  LHR-LHR  阅读(287)  评论(0编辑  收藏  举报