#include <iostream>
#include <iomanip>
using namespace std;
bool runnian(int a)
{
if ((a%4 == 0&&a%100!=0)||a%400==0)
return true;
else
return false;
}//判断闰年
void output(int a,int month,int year)
{
int n = 0,i;
cout <<"Mon Tue Wed Thu Fir Sat Sun "<<endl;
for (;a>0;a--)
{
cout <<" ";
n++;
}
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
i = 31;
break;
case 2:
{
if (runnian(year))
i = 29;
else
i = 28;
break;
}
default:
i = 30;
}
for (int g = 1;g<=i;g++)
{
cout <<setw(4)<<g;
n++;
if (n%7==0)
cout <<endl;
}
}//输入本月一月一日的星期数与星期一的差值和年份月份然后输出日历
int main()
{
//以1700年一月一日为基准,1700年一月一日为星期五
int year,month,i,n = 0,g,h = 0,m;
cout <<"please input the year"<<endl;
cin >>year;
cout <<"please input the month"<<endl;
cin >>month;
for (i = 1700;i<year;i++)
{
if (runnian(i))
n+=1;
}
g = (year-1700-n)*365+n*366+4;
for(h=1;h<month;h++)
{
if(h == 2&&runnian(year))
g+=29;
else if (h == 1||h == 3||h == 5||h == 7||h == 8||h == 10||h == 12)
g+=31;
else if(h == 4||h == 6||h == 9||h == 11)
g +=30;
else
g+=28;
}
g%=7;
output(g,month,year);
}
这个程序以1700年为基准,输入年份时应输入1700年之后的年份。
这样做时因为1580年变更历法,而且1600年之前的儒略历中闰年计算方法与现在不同。
为了方便起见就取了1700年一月一日为基准。
(博主是个小垃圾,这是在学习过程中写的,希望大家可以提提意见)