我正在做练习。它要求我创建月份日历,即当前用户时间的年份。在网上查了一些代码,效果不错,就是看不懂。特别是 year -= month < 3
行.有人可以解释一下吗?
//return the daycode of the first day of month.
int firstDayOfMonth(int month, int year) {
int dow = 0;
int day = 1;
int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
year -= month < 3; // I cannot understand this.
cout<<"This is year "<<year<<endl;
dow = ( year + year/4 - year/100 + year/400 + t[month-1] + day) % 7;
return dow;
}
int main()
{
int a;
cout<<firstDayOfMonth(2,2018)<<endl;
return 0;
}
最佳答案
在 C++ 中, bool 值可以隐式转换为整数,使用 false
成为0
和 true
成为1
. (参见 bool to int conversion。)
所以 year -= month < 3;
相当于:
if (month < 3) {
year -= 1; // true -> 1
} else {
year -= 0; // false -> 0
}
可以简化为:
if (month < 3) {
--year;
}
动机是一月和二月(月 1
和 2
)在任何闰日之前,而其他月份在任何闰日之后,因此将一月和二月视为上一年的年末比较方便,并将闰日添加到整个三月至二月的计算中。
这段代码显然没有针对可读性进行优化。
关于c++ - 了解每月第一天功能的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52939723/