基姆拉尔森计算公式
W=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7
- 其中,W表示算出的星期的数字表示:0:星期日;1:星期一……
- d表示日期,m表示月份,y表示年份
代码实现
#include<iostream>
using namespace std;
int main()
{
int N,i;
int Y, M, D,W;
//对于基姆拉尔森计算星期公式而言,最后的取值0表示星期日,1表示星期一,依次类推,以下用数组存储对应的日期,然后输出对应的星期
// 应将数组以地址的形式存储,否则会显示错误
char *weekday[7] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
while (cin >> N&&N > 0)
{
for (i = 0; i < N; i++)
{
cout << "请输出需要计算的年月日:" << endl;
cin >> Y >> M >> D;
//把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算
if (M == 1 || M == 2)
{
M = (M == 1 ? 13 : 14);
Y = Y - 1;
}
//基姆拉尔森计算星期公式
W = (D + 2 * M + 3 * (M + 1) / 5 + Y + Y / 4 - Y / 100 + Y / 400 + 1) % 7;
cout << weekday[W]<< endl;
}
if (i == N)
break;
}
}
// 如果要以对应的数字表示星期几,则用以下代码
/* if(W==0)
W=7;
*/