一年的第一天公式导致结果不一致
First Day of the year Formula resulting in inconsistent results
objective 是找到一年的第一天,然后据此计算日历和闰年。我 运行 关注的问题是;虽然 class 给出了一个公式(无法使用数组或函数),但我能够在大多数给定年份得到正确的结果,除了计算 saturdays(模数后的余数为 0。)
我的公式有问题吗?
我会link分解公式的页面,当然也提供我的。
**这是包含公式的页面:**
Math Forum - Formula for the First Day of a Year
这是我的公式和我的代码:
//Calculating Dates:
//N = d + 2m + [3(m+1)/5] + y + [y/4] - [y/100] + [y/400] + 2
//N = 1 + 2(13) + [3(13+1)/5] + year_int + [year_int/4] - [year_int/100] +
//[year_int/400] + 2
// I'm using a hard-coded "13" to represent January in the place of m
day_one =
1 + 2*(13) + 3*(13 + 1)/5 + year_int + (year_int / 4) - (year_int / 100) + (year_int / 400) +
2;
day_one = day_one % 7;
if (day_one < 0 || day_one >= 7) {
printf("Invalid Day\n");
} else {
switch (day_one) {
case 1:
weekday = "Sunday";
printf("%s", weekday);
break;
case 2:
weekday = "Monday";
printf("%s", weekday);
break;
case 3:
weekday = "Tuesday";
printf("%s", weekday);
break;
case 4:
weekday = "Wednesday";
printf("%s", weekday);
break;
case 5:
weekday = "Thursday";
printf("%s", weekday);
break;
case 6:
weekday = "Friday";
printf("%s", weekday);
break;
case 0:
weekday = "Saturday";
printf("%s", weekday);
break;
default: printf("Error");
break;
}
}
非常感谢任何帮助,我只是在寻求指导。
谢谢!
我发现要找到年份的第一天应该包含去年的整数。然后我回头看了看阅读材料,发现它是用纯文本说的。
脸掌
感谢您检查您是否在这里!
我希望这更清楚。请查看带有 !!! 的评论!在函数内部
/*
ZELLER'S Algorithm
https://en.wikipedia.org/wiki/Zeller's_congruence
Gregorian calendar
*/
#include <stdio.h>
int day_of_week(int d,int m,int y);
int main(void)
{
int day,month,year;
printf ("Day, Month, Year\n");
scanf ("%d %d %d",&day,&month,&year);
printf("%d",day_of_week(day,month,year));
return 0;
}
int day_of_week(int d, int m, int y)
//This function returns the ISO number of the day for a given day,month,year
{
int day;
if (d<1 || d>31 || m<1 || m>12 || y<1583 ) return 0; // In that case we have major error!
if ((m==1) || (m==2))
{m=m+12;--y;} // You have to do this correction !!!!
day=d+(m+1)*26/10+y+y/4+6*(y/100)+y/400;
day=day % 7; // 0=Saturday 1=Sunday ...
day=((day+5) % 7)+1; // Convertion to ISO date: 1=Monday, 2=Tuesday ..
return (day);
}
objective 是找到一年的第一天,然后据此计算日历和闰年。我 运行 关注的问题是;虽然 class 给出了一个公式(无法使用数组或函数),但我能够在大多数给定年份得到正确的结果,除了计算 saturdays(模数后的余数为 0。)
我的公式有问题吗?
我会link分解公式的页面,当然也提供我的。
**这是包含公式的页面:**
Math Forum - Formula for the First Day of a Year
这是我的公式和我的代码:
//Calculating Dates:
//N = d + 2m + [3(m+1)/5] + y + [y/4] - [y/100] + [y/400] + 2
//N = 1 + 2(13) + [3(13+1)/5] + year_int + [year_int/4] - [year_int/100] +
//[year_int/400] + 2
// I'm using a hard-coded "13" to represent January in the place of m
day_one =
1 + 2*(13) + 3*(13 + 1)/5 + year_int + (year_int / 4) - (year_int / 100) + (year_int / 400) +
2;
day_one = day_one % 7;
if (day_one < 0 || day_one >= 7) {
printf("Invalid Day\n");
} else {
switch (day_one) {
case 1:
weekday = "Sunday";
printf("%s", weekday);
break;
case 2:
weekday = "Monday";
printf("%s", weekday);
break;
case 3:
weekday = "Tuesday";
printf("%s", weekday);
break;
case 4:
weekday = "Wednesday";
printf("%s", weekday);
break;
case 5:
weekday = "Thursday";
printf("%s", weekday);
break;
case 6:
weekday = "Friday";
printf("%s", weekday);
break;
case 0:
weekday = "Saturday";
printf("%s", weekday);
break;
default: printf("Error");
break;
}
}
非常感谢任何帮助,我只是在寻求指导。
谢谢!
我发现要找到年份的第一天应该包含去年的整数。然后我回头看了看阅读材料,发现它是用纯文本说的。
脸掌
感谢您检查您是否在这里!
我希望这更清楚。请查看带有 !!! 的评论!在函数内部
/*
ZELLER'S Algorithm
https://en.wikipedia.org/wiki/Zeller's_congruence
Gregorian calendar
*/
#include <stdio.h>
int day_of_week(int d,int m,int y);
int main(void)
{
int day,month,year;
printf ("Day, Month, Year\n");
scanf ("%d %d %d",&day,&month,&year);
printf("%d",day_of_week(day,month,year));
return 0;
}
int day_of_week(int d, int m, int y)
//This function returns the ISO number of the day for a given day,month,year
{
int day;
if (d<1 || d>31 || m<1 || m>12 || y<1583 ) return 0; // In that case we have major error!
if ((m==1) || (m==2))
{m=m+12;--y;} // You have to do this correction !!!!
day=d+(m+1)*26/10+y+y/4+6*(y/100)+y/400;
day=day % 7; // 0=Saturday 1=Sunday ...
day=((day+5) % 7)+1; // Convertion to ISO date: 1=Monday, 2=Tuesday ..
return (day);
}