我正在尝试写一个简单的程序,它输出给定日期的一天,使用1/1/0001作为星期六。我已经写好了程序,但是我花了大约4个小时才发现一些错误,这使得我的答案是错误的。正确答案可以在这里找到。http://www.timeanddate.com/date/durationresult.html?d1=1&m1=1&y1=1&d2=1&m2=1&y2=400&ti=on
下面是我的程序:
#include <stdio.h>
#include <string.h>
long long int leap_days, days;
long long int *no_leap_years(int day, int month, long long int year){
leap_days = (year-1)/4;
leap_days -= (year-1)/100;
leap_days += (year-1)/400;
int is_leap;
if(!(year%400)){
is_leap = 1;
} else if(!(year%100)){
is_leap = 0;
} else if(!(year%4)){
is_leap = 1;
} else {
is_leap = 0;
}
printf("Leap year - %d\n", is_leap);
printf("Leap days - %lld\n", leap_days);
if(is_leap){
if(month>2) leap_days++;
else if(month==2){
if(day>28) leap_days++;
}
}
printf("Leap days - %lld\n", leap_days);
return &leap_days;
}
long long int *no_of_days(int day, int month, long long int year){
long long int leap_days = *no_leap_years(day, month, year);
days = leap_days + (365*(year-1));
if(month>1) days+=31;
if(month>2) days+=28;
if(month>3) days+=31;
if(month>4) days+=30;
if(month>5) days+=31;
if(month>6) days+=30;
if(month>7) days+=31;
if(month>8) days+=31;
if(month>9) days+=30;
if(month>10) days+=31;
if(month>11) days+=30;
days+=day;
printf("total - %lld\n", days);
return &days;
}
char *day_computer(int day, int month, long long int year){
long long int days = *no_of_days(day, month, year);
printf("total - %lld\n", days);
days %= 7;
printf("remain - %lld\n", days);
if(days==1) return "Saturday";
else if(days==2) return "Sunday";
else if(days==3) return "Monday";
else if(days==4) return "Tuesday";
else if(days==5) return "Wednesday";
else if(days==6) return "Thursday";
else return "Friday";
}
int main()
{
int dd = 1;
int mm = 1;
long long int yy = 400;
printf("%s\n", day_computer(dd, mm, yy));
return 0;
}根据该网站,从1/1/1到1/1/400的总no.of天数应该是145,735天,但根据我的代码,它是145732天。我找不到我失踪了3天的地方。请帮帮我。
你可以使用这个在线编辑器来编译我的程序。http://www.compileonline.com/compile_c_online.php
发布于 2014-08-11 03:43:44
在线日历程序是正确的;但是,您的代码也是正确的。问题出在您要计算的具体时间段。
您的代码针对闰年进行了调整:每4年调整一次,除了几个世纪(不是)和四个世纪(同样是)。然而,这两种“百年一遇”的调整在Julian Calendar中都没有观察到。
朱利安改革
延长了七个月,并用每四年增加一次的中间日取代了中间月,每四年增加一次。
对于公元前46年-1582年10月4日这段时间,你应该使用儒略的方法来计算闰年。对于该“截止日期”(1582年10月15日)之后的日期,您可以使用公历(当前)计算。
如果不对整个世纪的闰年进行2次调整,您将获得与在线日历相同的结果。
https://stackoverflow.com/questions/25231762
复制相似问题