算法设计——基姆拉尔森计算公式:计算几月几号是星期几

基姆拉尔森计算公式

W=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7

  1. 其中,W表示算出的星期的数字表示:0:星期日;1:星期一……
  2. 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;
*/

 

点赞