题目描述
日历是一个测量时间的系统,从几小时到几分钟到几个月和几天,最后是几年和几个世纪。小时,天,月,年和世纪的条款都是压光机系统的时间单位。
根据公历,即今日使用的公历,可以被4整除的年份是闰年,但百年不能被400整除。因此,1700年,1800年,1900年和2100年是不是闰年,但1600,2000和2400是闰年。
考虑到自2000年1月1日以来已经过去的天数,您的任务是查找星期几和星期几。
根据公历,即今日使用的公历,可以被4整除的年份是闰年,但百年不能被400整除。因此,1700年,1800年,1900年和2100年是不是闰年,但1600,2000和2400是闰年。
考虑到自2000年1月1日以来已经过去的天数,您的任务是查找星期几和星期几。
输入
输入由每行包含一个正整数的行组成,这是自2000年1月1日以来已经过去的天数AD最后一行包含一个不应被处理的整数-1。
你可以假定结果日期不会在9999年之后。
你可以假定结果日期不会在9999年之后。
输出
对于每个测试用例,以“YYYY-MM-DD DayOfWeek”格式输出包含日期和星期几的行,其中“DayOfWeek”必须是“星期日”,“星期一”,“星期二”, “星期三”,“星期四”,“星期五”和“星期六”。
样例输入
1730
1740
1750
1751
-1
样例输出
2004-09-26星期天
2004-10-06星期三
2004-10-16星期六
2004-10-17星期天#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
char week[7][12] = {"Saturday" ,"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
int year_day(int year)
{
if( (year % 4 == 0 && (year % 100) ) || year % 400 == 0)
return 366;
else
return 365;
}
int month_day(int year,int month)
{
if( (year % 4 == 0 && (year % 100) ) || year % 400 == 0)
{
if(month == 2)
return 29;
}
else
{
if(month == 2)
return 28;
}
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
return 31;
else
return 30;
}
int main()
{
int n;
while(cin>>n,n!=-1)
{
int year = 2000;
int month = 1;
int day = n % 7;
while(n>=year_day(year))
{
n=n-year_day(year);
year++;
}
while(n>=month_day(year,month))
{
n=n-month_day(year,month);
month++;
}
printf("%d-%02d-%02d %s\n",year,month,n + 1,week[day]);
}
return 0;
}