已知公元2000年1月1日是星期六,计算经过n天后的年月日和星期。
由于2000年有366天,但是第一天已经过去,所以在计算时要注意2000年还剩365天。
#include<stdio.h>
#include<string.h>
char s[7][10]={"Saturday","Sunday","Monday","Tuesday",
"Wednesday","Thursday","Friday"};
int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool isRun(int y)
{
bool flag = false;
if(y%400==0)
flag = true;
else if(y%4==0 && y%100!=0)
flag = true;
return flag;
}
int main()
{
int n;
while(scanf("%d",&n))
{
if(n==-1) break;
char week[10];
strcpy(week,s[n%7]); //先算出星期几
int endy,endm,endd;
if(n<=365)
{
endy=2000;
}else{
int c = n/365; //大致过了几年
n=n-365; //2000年已过
int i;
for(i=2001;i<=2000+c;i++)
{
int days=365;
if(isRun(i))
days=366;
if(n<=days) break; //最后处于第i年,在该年要过n天
else n-=days;
}
endy = i;
}
int sumd = 0;
if(isRun(endy)) month[2]=29;
else month[2]=28;
if(endy==2000) n=n+1;//由于2000年1月1号这天已过
int j;
for(j=1;j<=12;j++)
{
if(n<=month[j]) //最终处于第j月
break;
else n-=month[j];
}
endm = j;
endd = n;
printf("%d-%02d-%02d %s\n",endy,endm,endd,week);
}
return 0;
}


被折叠的 条评论
为什么被折叠?



