-
Time Limit:
- 1000ms Memory Limit:
- 65536kB
-
Description
- 在我们现在使用的日历中, 闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100 不是闰年,而 1600, 2000 和 2400是闰年。 给定从公元2000年1月1日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几。 Input
- 输入包含若干行,每行包含一个正整数,表示从2000年1月1日开始逝去的天数。输入最后一行是−1, 不必处理。可以假设结果的年份不会超过9999。 Output
-
1730 1740 1750 1751 -1
Sample Output
-
2004-09-26 Sunday 2004-10-06 Wednesday 2004-10-16 Saturday 2004-10-17 Sunday
Hint
-
2000.1.1. 是星期六
------------------------------------------------------------------------------------------------------------------------
#include<iostream> using namespace std; int is_run(int y){ if(y%4==0){ if(y%100!=0) return 366; else if(y%400==0) return 366; else return 365; } return 365; } int main(){ int day,dayd,i,y,m,d,flag; int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int daysofrun[12]={31,29,31,30,31,30,31,31,30,31,30,31}; char s[7][10]={"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" }; while(true){ flag=0; cin>>day; dayd=day; if(day==-1) break; // day++; if(day<=365){ flag=1; y=2000; for(i=0;i<12;i++){ if(day-daysofrun[i]<0){ break; } day=day-daysofrun[i]; } m=i+1; d=day+1; } else{ day-=365; for(i=2001;i<9999;i++){ flag=(is_run(i)==365)?0:1; if(day-is_run(i)<=0){ break; } day-=is_run(i); } y=i; for(i=0;i<12;i++){ if(flag==0){ if(day-days[i]<=0){ break; } day=day-days[i]; } else{ if(day-daysofrun[i]<=0){ break; } day=day-daysofrun[i]; } } m=i+1; d=day; } cout<<y<<"-"; if(m<10) cout<<"0"<<m; else cout<<m; cout<<"-"; if(d<10) cout<<"0"<<d; else cout<<d; cout<<" "<<s[dayd%7]<<endl; } return 0; }
如果2000年是闰年,所以如果逝去的时间小于等于365天的话日期还是2000年,但是由于1号已经占去一天所以最后的“日”要加1;
对每个测试样例,输出一行,该行包含对应的日期和星期几。格式为“YYYY-MM-DD DayOfWeek”, 其中 “DayOfWeek” 必须是下面中的一个: "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" 或 "Saturday“。
Sample Input