在咱們如今使用的日曆中, 閏年被定義爲能被4整除的年份,可是能被100整除而不能被400整除的年是例外,它們不是閏年。例如:1700, 1800, 1900 和 2100 不是閏年,而 1600, 2000 和 2400是閏年。 給定從公元2000年1月1日開始逝去的天數,你的任務是給出這一天是哪年哪月哪日星期幾。ide
在咱們如今使用的日曆中, 閏年被定義爲能被4整除的年份,可是能被100整除而不能被400整除的年是例外,它們不是閏年。例如:1700, 1800, 1900 和 2100 不是閏年,而 1600, 2000 和 2400是閏年。 給定從公元2000年1月1日開始逝去的天數,你的任務是給出這一天是哪年哪月哪日星期幾。ide
輸入一行,每行包含一個正整數,表示從2000年1月1日開始逝去的天數。數據保證結果的年份不會超過9999。spa
輸出一行,該行包含對應的日期和星期幾。格式爲「YYYY-MM-DD DayOfWeek」, 其中 「DayOfWeek」 必須是下面中的一個: "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" 或 "Saturday「。code
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 }