输入年月日,计算星期几 (数学推理)

自制程序:输入年月日,以空格隔开,输出当天的星期数。时间范围为公元2000-2600年
代码如下:

#include <iostream>
using namespace std;
int main()
{
    cout<<"输入年月日,以空格隔开(范围公元2000年到2600年)"<<endl;
	int y, m, d;
	while (cin >> y >> m >> d)//计算2000年到2600年间星期几
	{
		if (2000 <= y && y <= 2600 && 1 <= m && m <= 12 && 1 <= d && d <= 31)
		{
			int xq = 6;//从2000为基准1月1号为星期六
			if (y == 2000)
			{
				for (int j = m; j > 1; j--)
				{
					switch (j - 1)
					{
					case 1: case 3: case 5: case 7: case 8: case 10: case 12: xq = xq + 31; break;
					case 4: case 6: case 9: case 11: xq = xq + 30; break;
					case 2: xq = xq + 29; break;
					}
				}
			}
			else
			{

				for (int k = y; 2000 < k; k--)
				{
					int j = k - 1;
					if (j % 400 == 0 || j % 4 == 0 && j % 100 != 0)
					{
						xq = xq + 366;
					}
					else
					{
						xq = xq + 365;
					}
				}
				for (int p = m; p > 1; p--)
				{
					switch (p - 1)
					{
					case 1: case 3: case 5: case 7: case 8: case 10: case 12: xq = xq + 31; break;
					case 4: case 6: case 9: case 11: xq = xq + 30; break;
					case 2: xq = xq + 28; break;
					}
				}
				if (y % 400 == 0 || y % 4 == 0 && y % 100 != 0)
				{
					if (m > 2) xq = xq + 1;
				}
			}
			xq = xq + d - 1;
			xq = xq % 7;
			cout<<"星期";
			switch (xq)
			{
			case 1: case 2: case 3: case 4: case 5: case 6: cout << xq << endl; break;
			case 0: cout << 7 << endl; break;
			}
		}
		else cout<<"您输入的年月日不符合规范"<<endl;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_44012745/article/details/88947037
今日推荐