题目描述:
在我们现在使用的日历中, 闰年被定义为能被 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" and "Saturday“。
样例输入:
样例1 1750 样例2 1
样例输出:
样例1 2004-10-16 Saturday 样例2 2000-01-2 Sunday
提示:
公元 2000 年 1 月 1 日是星期六
时间限制: 1000ms
空间限制: 128MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int bgyear,bgmonth,bgday;
int enyear,enmonth,enday;
int month[21]={0,31,28,31,30,31,30,31,31,30,31,30,31};//非闰年
int rmonth[21]={0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年
int flag=1;
int tot=0;
int dow=6;
string week[8]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
int n;
cin>>n;
bgyear=2000;
bgmonth=1;
bgday=1;
for(int i=2000;i<=10000;i++){
if((i%4==0&&i%100!=0)||(i%400==0)){
for(int j=1;j<=12;j++){
if(i==bgyear&&j<bgmonth)
continue;
for(int k=1;k<=rmonth[j];k++){
if(tot==n){
if(j<10&&k<10){
cout<<i<<"-"<<"0"<<j<<"-"<<"0"<<k<<" "<<week[dow-1];
return 0;
}
else if(j<10){
cout<<i<<"-"<<"0"<<j<<"-"<<k<<" "<<week[dow-1];
return 0;
}
else if(k<10)
{
cout<<i<<"-"<<j<<"-"<<"0"<<k<<" "<<week[dow-1];
return 0;
}
else
{
cout<<i<<"-"<<j<<"-"<<k<<" "<<week[dow-1];
return 0;
}
}
tot++;
dow++;
if(dow==8)
dow=1;
}
}
}
else{
for(int j=1;j<=12;j++){
for(int k=1;k<=month[j];k++){
if(tot==n){
if(j<10&&k<10){
cout<<i<<"-"<<"0"<<j<<"-"<<"0"<<k<<" "<<week[dow-1];
return 0;
}
else if(j<10){
cout<<i<<"-"<<"0"<<j<<"-"<<k<<" "<<week[dow-1];
return 0;
}
else if(k<10){
cout<<i<<"-"<<j<<"-"<<"0"<<k<<" "<<week[dow-1];
return 0;
}
else {
cout<<i<<"-"<<j<<"-"<<k<<" "<<week[dow-1];
return 0;
}
}
tot++;
dow++;
if(dow==8)
dow=1;
}
}
}
}
return 0;
}