判断年份是否为闰年,然后计算月份有多少天,最后用一个******公式(名字太长记不住了……)确定该月的第一天是周几,最后输出就可以了,代码走起…
#include <iostream>
using namespace std;
bool leap(int);
int days_month(int,int);
int start_weekday(int,int);
int main()
{
int years,months;
int m=1;
cin>>years>>months;
int start=start_weekday(years,months);
int days=days_month(years,months);
cout<<years<<"年"<<months<<"月"<<endl<<"日 一 二 三 四 五 六"<<endl;
for(int i=0;i<6;i++)
{
for(int j=0;j<7;j++)
{
if(m<=days)
{
if(j<start)
{
cout<<" ";
}else
{
if(m<10)
{
cout<<" "<<m<<" ";
}else
{
cout<<m<<" ";
}
m++;
start=0;
}
}else{break;}
}
cout<<endl;
}
return 0;
}
bool leap(int year)
{
bool leap_return=false;
if((year%100!=0&&year%4==0) || year%400==0)
{
leap_return=true;
}
else
{
leap_return=false;
}
return leap_return;
}
int days_month(int year,int month)
{
int days_return;
if(month==2)
{
if(leap(year)==true)
{
days_return=29;
}else
{
days_return=28;
}
}else
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days_return=31;
break;
case 4:
case 6:
case 9:
case 11:
days_return=30;
break;
}
}
return days_return;
}
int start_weekday(int year,int month)
{
//W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1) mod 7
int weekday=0;
const int day=1;
switch(month)
{
case 1:
case 2:
--year;
month+=12;
break;
default:
;
}
weekday=(day+2*month+(3*(month+1))/5+year+year/4-year/100+year/400+1)%7;
return weekday;
}
就是代码有点繁琐…运行结果等用电脑的时候再编辑贴图~
图图来了~~