【发布时间】:2014-03-21 03:30:14
【问题描述】:
提示是: 实现一个函数,该函数读取一个包含日历日期文本描述的字符串,并打印出对应的星期几(周一至周日)。此函数的两种有效输入格式是:
mm/dd/yyyy
示例:2014 年 3 月 4 日
输出:周二
月 dd, yyyy
示例:2014 年 3 月 4 日
输出:周二
其中 dd 是数字日期,mm 是数字月份,yyyy 是年份,Month 是月份名称。所有日期和月份均使用两位数指定(例如,对于 3 月,使用 03 而不是 3)。在第二种有效格式中,Month 和 dd 之间以及 dd 和 yyyy 之间有一个空格。 为了在此任务中获得全部功劳,您的程序应打印出正确的星期几,以便以正确的格式输入任何内容。
所以到目前为止,我能够得到每一天的正确日期,除了 2005 年 2009 年 2013 年 2017 年等......他们总是落后一天,我注意到它过去了每 4 年的趋势天数最终落后 1 天。我不确定出了什么问题。是不是因为我每年使用 365.25 的方法不对?
我的代码:
#include<stdio.h>
int main()
{
int month,day1,day2,totdays,year,dm,dn,leap,rmd;
printf(" ");
scanf("%d/%d/%d",&month,&day1,&year);
if(((year%4==0) && (year%100!=0)) || (year%400==0))
{
if(month==1)
dm=0;
if(month==2)
dm=31;
if(month==3)
dm=60;
if(month==4)
dm=91;
if(month==5)
dm=121;
if(month==6)
dm=152;
if(month==7)
dm=182;
if(month==8)
dm=213;
if(month==9)
dm=244;
if(month==10)
dm=274;
if(month==11)
dm=305;
if(month==12)
dm=335;
}
else
{
if(month==1)
dm=0;
if(month==2)
dm=31;
if(month==3)
dm=59;
if(month==4)
dm=90;
if(month==5)
dm=120;
if(month==6)
dm=151;
if(month==7)
dm=181;
if(month==8)
dm=212;
if(month==9)
dm=243;
if(month==10)
dm=273;
if(month==11)
dm=304;
if(month==12)
dm=334;
}
day2=(year-1970)*(365.25);
dn=dm+day1;
totdays=day2+dn;
rmd=totdays%7;
if(rmd==5)
{
printf("Monday \n");
}
if(rmd==6)
{
printf("Tuesday \n");
}
if(rmd==0)
{
printf("Wednesday \n");
}
if(rmd==1)
{
printf("Thursday \n");
}
if(rmd==2)
{
printf("Friday \n");
}
if(rmd==3)
{
printf("Saturday \n");
}
if(rmd==4)
{
printf("Sunday \n");
}
return 0;
}
【问题讨论】:
-
在闰年之后的那些年给你带来麻烦是多么奇怪。再看看你的闰年处理。
-
我仔细检查了我的闰年情况,是不是错了?
-
这更像是一道数学题。如果你能破解其中的数学,那么你就得到了答案。