日历问题
日历问题
题目描述
在我们现在使用的日历中, 闰年被定义为能被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 }