解题思路
1.用数组模拟 星期几,各个月份的天数
2.星期几 就是 天数 % 7
3.年份 减去该年有多少天(判断闰年),减一次+1年,直到 所给天数小于该年的天数
4.月份 减去该月有多少天,减一次+1月,直到所给天数小于该月的天数
5.剩余的日子 +1 就是 所求的日子
AC代码
#include<stdio.h>
//星期几 ,dow[days % 7]
// year = 2000 if days - dofyear[jundge[year]]>0 year ++
// month=1 runnian = judge[year] if days - domonth[run][month]>0 month++
//day
int judge(int year){
if((year%4==0 && year %100!=0) || year%400==0)
return 1;
else
return 0;
}
int main(){
int days;
//模拟数组
char doweek[7][10] = {"Saturday","Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday"};
int doyear[2]={365,366};
int domonth[2][12] = {31,28,31,30,31,30,31,31,30,31,30,31
,31,29,31,30,31,30,31,31,30,31,30,31};
//输入
while(1){
scanf("%d",&days);
if(days==-1)
break;
//计算星期几
int week = days % 7;
//计算年
int year = 2000;
int leap = 1;//1是闰年
days -= doyear[leap];
while(days>=0){
year++;
leap = judge(year);
days -= doyear[leap];
}
days += doyear[leap];
//计算月
int month = 0;
days -= domonth[leap][month];
while(days>=0){
month++;
days -= domonth[leap][month];
}
days += domonth[leap][month];
//天数 就是剩下的days+1
//输出
printf("%d-%02d-%02d %s\n",year,month+1,days+1,doweek[week]);
}
}
总结
善用数组模拟