计算星期几-基姆拉尔森公式
week代表周几,0=星期一,6=星期天
代码实现如下:
#include <stdio.h>
#include <string.h>
int months[13][2] = {{0, 0}, {31, 31}, {28, 29}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}};
const char *WeeksMap[8] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
const char *MonthsMap[13] = {
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
};
bool isLeap(int year)
{
return (year % 4 == 0 && year % 100 != 0) || (year % 100 == 0 && year % 400 == 0);
}
int main(int argc, char const *argv[])
{
int y1, m1, d1;
char mString[13];
while (scanf("%d %s %d", &d1, mString, &y1) != EOF)
{
for (int i = 0; i < 12; i++)
{
if (strcmp(mString, MonthsMap[i]) == 0)
{
m1 = i + 1;
}
}
if (m1 == 1 || m1 == 2)
{
m1 += 12;
y1--;
}
int a = (d1 + 2 * m1 + 3 * (m1 + 1) / 5 + y1 + y1 / 4 - y1 / 100 + y1 / 400) % 7;
printf("%s\n", WeeksMap[a]);
}
return 0;
}
参考资料:
[1].《算法笔记》第三章. p91
[2]. 懒羊羊的算法实现.码云