描述
给定年月,打印当月的月历表。
输入
输入为一行两个整数,第一个整数是年份year(1900 ≤ year ≤ 2099),第二个整数是月份month(1 ≤ month ≤ 12),中间用单个空格隔开。
输出
输出为月历表。月历表第一行为星期表头,如下所示:
Sun Mon Tue Wed Thu Fri Sat
其余各行一次是当月各天的日期,从1日开始到31日(30日或28日)。
日期数字应于星期表头右对齐,即各位数与星期表头相应缩写的最后一个字母对齐。日期中间用空格分隔出空白。
样例输入
2006 5
样例输出
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
提示
闰年判断方法:能被4整除但不能被100整除,或者能被400整除。
1900年1月1日是周一。
解题
判断好闰年与天数即可
代码
#include <iostream>
using namespace std;
bool pd(int i) {//判断闰年
if(((i%4==0)&&(i%100!=0))||(i%400==0)){
return true;
}
return false;
}
int days(int m, int y){//得到天数,m:月,y:年
if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12){
return 31;
} else if (m == 2){
return pd(y)?29:28;
}else{
return 30;
}
}
int main(){
int year,month;
int week=1;
cin>>year>>month;
for (int i = 1900; i < year; ++i) {//得到所在年份星期
week=((pd(i)?366:365)+week)%7;
}
for (int i = 1; i < month; ++i) {//得到所在月份星期
week=(days(i,year)+week)%7;
}
cout<<"Sun Mon Tue Wed Thu Fri Sat"<<endl;//输出
for(int i=0;i<week;i++)printf(" ");
int day=days(month,year);
for (int j = 1; j <= day ; ++j) {
if((j-1+week)%7==0)cout<<endl;
printf("%3d ",j);
}
}