匿名用户
1级
2013-02-23 回答
#include
//累加天数表
int dayInfo[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
//星期提示校正,避免星期日被显示出星期7
char weeks[][3] = {"一","二","三","四","五","六","日"};
/*
计算闰年
*/
int isLeap(int y)
{
if((y%4==0 && y%100!=0) || (y%400)==0)
return 1;
return 0;
}
/*
就算天数,累加法,闰年超过2月则多加1
*/
int computeDay(int y,int m,int d)
{
int day = 0;
for(int i=1;i
{
day += dayInfo[i];
}
day += d;
if(m>2 && isLeap(y))day += 1;
return day;
}
/*
基姆拉尔森计算公式
W = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) % 7,其中y是年,m是月,d是日,
有两点要注意:当m是一月或2月时,算作上一年的13月或14月,例如:2013-1-1应记作2012-13-1
此公式算出来的星期从0开始
*/
int computeWeek(int y,int m,int d)
{
if(m==1 || m==2) { m += 12; y--; }
return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) % 7;
}
int main()
{
int y,m,d;
int day,week;
printf("输入日期,格式为:年 月 日,例如:2013 2 22:");
scanf("%d %d %d",&y,&m,&d);
day = computeDay(y,m,d);
week = computeWeek(y,m,d);
printf("%d 年 %d 月 %d 日是 %d 年中的第 %d 天,这一天是星期 %s。\n",y,m,d,y,day,weeks[week]);
return 0;
}