给定起始时间为2000年1月1日,输入数字n,n为多少天后。输出那一天的日期和星期.
int h[12]={31,28,31,30,31,30,31,31,30,31,30,31};
char s[7][10]={"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
inline int r(int y)
{
if((y%4==0&&y%100!=0)||y%400==0)
return 366;
else return 365;
}
int main()
{
int y,d,x;
int i;
while(scanf("%d",&d)&&d!=-1)
{
x=d%7;
d++;
int m=d/146097;//这里是做了个优化,146097天相当于400年
d-=m*146097;
y=2000+m*400;
for(;d>r(y);y++)
{
d-=r(y);
}
if(r(y)==366) h[1]=29;else h[1]=28;
i=0;
while(d>h[i])
{
d-=h[i];i++;
}
printf("%d-%02d-%02d %s/n",y,i+1,d,s[x]);
}
return 0;
}
是个ACM题目,不过我是在编一个程序的时候用到,就刚好发出来了