7月11日
注意事项
笔者初学C++,代码并不是纯C++
算法介绍
设要算的年份是x,S=(x-1)+[ (x-1)/4 ]-[ (x-1) / 100 ]+[(x-1)/400]+C 。
C表示从这一年的元旦算到你要算的那一天为止(包含那一天)的日数 。
最终除的得出的S除以7后,若整除表示是星期天 若余数为1,就是星期一,以此类推。
从这个算法可以推断是外国人,但是谁我忘了…
其次蔡勒公式也是很出名的,在最后开源无函数封装的蔡锷公式写的代码。
函数封装
1.计算某年是闰年
算法:满足闰年的条件是 年数整除4并且年数整除100 是闰年 或者 年数整除400是闰年
返回值 ?1:0
char R(int year)
{
return (year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0;
}
2.获取某年某月距1月1日共有多少天
特殊在2月,利用判断闰年函数计算,返回值 总天数
int getdaycount(int year,int month)
{
int daycount = 31;
if(month==4||month==6||month==9||month==11)
{
daycount = 30;
}
else if(month==2)
{
daycount = (R(year) ? 29 : 28);
}
return daycount;
}
3.计算某年某月到1900年1月1日有多少天
以1900年1月1日是星期一为标准日,计算总天数
int getinterval(int year,int month)
{
int interval = 0;//interval:间隔,间隙
int i = 1900;
for(;i<year;i++)//累加年份的天数
{
interval += R(year) ? 366 : 365;//年x日=除前年份总天数
}
for(i=1;i<month;i++)//累加月份的天数
{
interval += getdaycount(year,i);//加上当年总天数
}
return interval;//返回值为间隔的总天数和
}
4.日历显示
void showcalendar(int year,int month)
{
int daycount = getdaycount(year,month)