我在C ++中编写一个函数,以获取星期,日和年(从1900年开始)的星期几。我必须执行的方法(我正在接受订单,这是一种练习)是经过的总天数的模数为7。
例如,2018年11月21日将是该年的第325天(考虑leap年)。星期几将是325%7,它将给出一个介于0到6之间的数字,0是星期日,1是星期一,依此类推,直到6表示星期六。
但这仅在星期一开始的几年中有效。从2018年开始,但是2019年将关闭1天,因为它从星期二开始。
我要解决此问题的想法是知道那年的哪一天开始并将其添加到给定的0-6数字中(如果该数字大于6,则将其修复),但是我必须使用前一年的函数,直到达到1900年(将其设置为星期一)为止。听起来很糟糕,我想不出另一种方法。
预先感谢
答案 0 :(得分:6)
如果您不想使用任何库而仅通过计算来完成,这是一个解决方案。
http://mathforum.org/dr.math/faq/faq.calendar.html
或简单的解释video。
您可以做的就是将此逻辑转换为程序,并找出星期几。
int dayofweek(int d, int m, int y)
{
static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
y -= m < 3;
return ( y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}
答案 1 :(得分:3)
http://www.cplusplus.com/reference/ctime/tm/
http://www.cplusplus.com/reference/ctime/mktime/
int weakDayOfYearBegin(int year)
{
std::tm t {};
t.tm_year = year - 1900;
t.tm_mday = 1;
std::mktime(&t);
return t.tm_wday;
}