关于日期的计算问题。。。。。
昨天晚上加今天半早上。。。 终于ac了
两个注意点 一个是关于某年某月某日换算为这年的N天的问题 定义两个数组 一个用来存放闰年的 一个用来存放平年的。。。。。 这样处理起来就不用怕出差错了。。
用二维字符数组来代替switch 每一个“,,,”表示每行中的字符串 这样方便一点
最后贴上代码 纪念我的逝去的时间。。。。。。
#include<stdio.h>
#include<stdlib.h>
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
char s[8][10] = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
int run(int x)
{
if((x%100!=0&&x%4==0)||(x%400==0))
return 1;
else
return 0;
}
int days(int year,int mouth,int day)
{
int sum=0,i,z;
for(i=0;i<=mouth-1;i++)
{
if(run(year))
sum+=b[i];
else
sum+=a[i];
}
sum+=day;
return sum;
}
int get(int year,int mouth,int day)
{
if(run(year)==1)
{
if((day>b[mouth])||(mouth>12&&mouth<=0)||(year<0&&year>1000)||day==0)
return 0;
else
return 1;
}
else
{
if((day>a[mouth])||(mouth>12&&mouth<=0)||(year<0&&year>1000)||day==0)
return 0;
else
return 1;
}
}
int main()
{
int year,mouth,day,sum,i;
while(scanf("%d %d %d",&year,&mouth,&day)!=EOF)
{
sum=0;
if(get(year,mouth,day)==0)
printf("illegal\n");
else
{
for(i=1;i<year;i++)
{
if(run(i)==1)
sum+=2;
else
sum+=1;
}
sum=sum+days(year,mouth,day)-1;
sum=sum%7;
printf("%s\n",s[sum]);
}
}
return 0;
}