一个关于判断12月31日星期几的函数

来源:百度知道 编辑:UC知道 时间:2024/06/17 15:11:06
为了计算“输入年份的上一年12月31日星期几”,定义了以下函数:
main()
{long int week;
int x;
scanf("%d",&x);

week=((x-1)/365+(x-1)/4-(x-1)/100+(x-1)/400)%7;
printf("%d",week);
}

为何输出的不对?比如1990年12月31日应该是星期一,但输入1991后,输出的却是4
回答者: 霸上鸿门
你是不是智力低下?没看见公式吗~
哦,其实没有必要算出具体日期,只要12月31就行了,一年内的日期我定义了一个模块来计算,另外,2楼的语句用switch-case可以大大简化
问题自己找到了,那个365后边是*号

//vc6 pass
#include <stdio.h>
char * day[7]={
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
"Sunday"
};
int month[12] = {
0,
31,
31+28,
31+28+31,
31+28+31+30,
31+28+31+30+31,
31+28+31+30+31+30,
31+28+31+30+31+30+31,
31+28+31+30+31+30+31+31,
31+28+31+30+31+30+31+31+30,
31+28+31+30+31+30+31+31+30+31,
31+28+31+30+31+30+31+31+30+31+30
};
int main()
{
long total_days;
int y,m,d;

puts("Please give me a date(yyyy.mm.dd)?");
scanf("%d.%d.%d",&y,&m,&d);

total_days = (y-1900)*365 + (y-1900)/4 + month[m-1] + d-1;
if((y-1900)%4==0 && m<3 && y!=1900) --total_days;

puts(day[total_days%7]);
return 0;