题目连接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2080
1,闰年判断法
2,今天星期x,n天后星期y:y = (x+n) % 7
3,今年是x年,n天后是y年:用循环一年一年模拟,直到剩余的天数不足某一年的天数为止
4,今天是x月,n天后是y月:先根据是否闰年设置二月份的天数,然后用循环一月一月模拟,直到剩余的天数不足某月为止
5,今天是x号,n天后是y号:y = n+x(以上所说的n都是不超过所讨论数量级的天数)
#include <iostream>
using namespace std;
inline bool Leap(int year)
{
return ((year % 100 != 0 && year % 4 == 0) || (year % 400 == 0));
}
int main()
{
freopen("in.txt","r",stdin);
char weekday[7][10] = {"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday","Saturday"};
int month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int days,ry,rm,rd,cy;
while(cin >> days && days != -1)
{
rd = (days + 6) % 7;
ry = 2000;
cy = 366;
while(days >= cy)
{
days -= cy;
++ry;
if(Leap(ry))
cy = 366;
else
cy = 365;
}
if(Leap(ry))
month[2] = 29;
else
month[2] = 28;
rm = 1;
while(days >= month[rm])
{
days -= month[rm];
++rm;
}
printf("%d-%02d-%02d %s/n",ry,rm,days + 1,weekday[rd]);
}
return 0;
}