A41124. 日历问题
填空题
中等
知识点
题目描述
日历问题
题目描述
在我们现在使用的日历中, 闰年被定义为能被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
参考答案
#include<iostream>
using namespace std;
int main(){
int year=2000,month=1,day=1,time;//定义初始的年、月、日和time天以后
cin>>time;
for(int i=0;i<time;i++){
day++;
if(day==31){//小月有30天,但到31才判定 或可以到30判定,day=0
if(month==4||month==6||month==9||month==11){
month++;
day=1;
}
}
else if(day==32){//小大月有31天,但到32才判定 或可以到31判定,day=0 。下同义
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
month++;
day=1;
}
}
else if(day>=29&&month==2){//两月有28或29天,day大于等于29开始判定
if(((year%4==0&&year%100!=0)||(year%400==0))){//如果是闰年,那么到30
if(day==30){
month++;
day=1;
}
}
else{//否则到29
month++;
day=1;
}
}
if(month==13){//月数到13,年数加1,月数归1
year++;
month=1;
}
}
cout<<year<<"-";//年数只可能为四位数,直接输出
if(month<10)cout<<"0"<<month<<"-";//38、39、40、41行。如果月份或天数为
else cout<<month<<"-";//一位数,那么前面要加0
if(day<10)cout<<"0"<<day<<" ";//如2020.2.2变成2020-02-02
else cout<<day<<" ";//因为这个作者卡了很久
if(time%7==1)cout<<"Sunday";//取余
else if(time%7==2)cout<<"Monday";
else if(time%7==3)cout<<"Tuesday";
else if(time%7==4)cout<<"Wednesday";
else if(time%7==5)cout<<"Thursday";
else if(time%7==6)cout<<"Friday";
else cout<<"Saturday";
return 0;
}
上一题
下一题