日曆問題

日曆問題

題目描述

在咱們如今使用的日曆中, 閏年被定義爲能被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 }
calendar
相關文章
相關標籤/搜索