已知2007年1月1日为星期一。 设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印。 为完成此函数,设计必要的辅助函数可能也是必要的。其中输入为年分和月份。
样例输入: 2007 1 样例输出: Calendar 2007-01 --------------------- Su Mo Tu We Th Fr Sa --------------------- 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 ---------------------
样例输入: 2010 9 样例输出: Calendar 2010-09 --------------------- Su Mo Tu We Th Fr Sa --------------------- 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 ---------------------
注意:短线“-”个数要与题目中一致,否则系统会判为错误。
#include <stdio.h>
#include <iostream>
#include <iomanip>
using namespace std;
int MO[13] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 闰年计算函数
int leapyear(int year) {
return ((year%4 == 0 && year%100 != 0) || year%400 == 0) ? 1 : 0;
}
int main(void)
{
int y, m, sumy;
cin >> y >> m;
for(int i=2007; i<y; i++)
if(leapyear(i))
sumy += 366;
else sumy += 365;
if(m >= 2)
if(leapyear(y))
MO[1] += 1;
for(int i=0; i<m-1; i++)
sumy += MO[i];
int t = (sumy)%7;
// cout << t << endl;
cout << "Calendar " << y << "-" << setfill('0') << setw(2)<< m << endl;
cout << "---------------------" << endl;
cout << " Su Mo Tu We Th Fr Sa" << endl;
cout << "---------------------" << endl;
for(int i=0; i<=t; i++)
{
cout << setfill(' ') << setw(3) << " ";
}
//打印日历表
{
for(int i=1; i<=MO[m-1]; i++)
{
if((t+i)%7 == 0)
cout << endl;
//else
cout << setfill(' ') << setw(3) << i;
}
}
cout << endl << "---------------------" << endl;
return 0;
}