#include <iostream>
#include <string>
#include <cassert>
using namespace std;
/*
* [1900, year] 之间闰年的数目
*/
int num_of_leapyear(int year);
int main()
{
const int month[13] = {
0, 31, 28, 31, 30, 31,
30, 31, 31, 30, 31,
30, 31
};
int pre[13] = {0}; /* store the pre sum */
string text[7] = {
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
};
for (int i = 1; i <= 12; i++)
{
pre[i] = pre[i-1] + month[i-1];
}
int y, m, d;
while(cin >> y >> m >> d)
{
assert(y > 1900);
assert(m > 0 && m < 13);
assert(d > 0 && d < month[m]);
int days;
days = (y - 1900) * 365 + pre[m] + d;
//days += (y - 1900) / 4; /* There is problem here we need to solve */
days += num_of_leapyear(y);
if ( (y % 400 == 0) || (y % 100 != 0 && y % 4 == 0))
{
if (m < 3)
days--;
}
cout << text[days%7] << "\n";
}
return 0;
}
做了一些测试都是正确的,手中没有万年历2400 后面的没测。希望大家补充。
给定日期求对应的星期 (日期从1900.1.1 星期一开始)
最新推荐文章于 2020-06-03 14:34:52 发布