已知今天星期六,问n天后星期几
x=(6+n)%7
已知今天星期六,问n天前星期几
x=6-n%7
(一)已知2000年1月1日为星期六,求某一年的日历
x=(6+n)%7
已知今天星期六,问n天前星期几
x=6-n%7
(一)已知2000年1月1日为星期六,求某一年的日历
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int num;
int isLeapyear(int year)//求某年是否为闰年
{
int isOK=0;
isOK=(year%4==0&&year%100!=0||year%400==0)?1:0;
// printf("%d年是%d\n",year,isOK);
return isOK;
}
int yearDays(int year)//求某年有几天
{
int days=0;
days=(isLeapyear(year)==1) ? 366 : 365;
// printf("%d年有%d天\n",year,days);
return days;
}
int yearMonthdays(int year ,int month )//求某年某月的天数
{
int days=0;
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=31;
break;
case 4:
case 6:
case 9:
case 11:
days=30;
break;
case 2:
days=(isLeapyear(year)==1) ? 29 : 28;
break;
}
// printf("%d年%d月有%d天\n",year,month,days);
return days;
}
int firstYearMonthDaysto2000_1_1(int year , int month)//求某年某月的第一天到2000年1月1日有多少天
{
int i;
int days=0;
if(year>=2000)
{
for(i=2000;i<year;i++)
days+=yearDays(i);
for(i=1;i<month;i++)
days+=yearMonthdays(year,i);
}
else
{
for(i=year+1;i<=2000;i++)
days+=yearDays(i);
for(i=month;i<=12;i++)
days+=yearMonthdays(year,i);
}
// printf("到2000年1月1日有%d\n",days);
return days;
}
int yearMonthWeekDay(int year , int month)//求距2000年1月1日为n天的日子为星期几
{
int weekday=99;
int n=firstYearMonthDaysto2000_1_1(year,month);
if(year>=2000)
{
weekday=(6+n)%7;
}
else
{
weekday=6-n%7;
}
return weekday;
}
void displayYearMonth(int year, int month)//输出某年某月的日历
{
printf("------------------------%d年%d月------------------------\n",year,month);
printf("日\t一\t二\t三\t四\t五\t六\t周\n");
int i;
int count=0;
int zhou=1;
int days=yearMonthdays(year,month);
int weekday=yearMonthWeekDay(year,month);
for(i=0;i<weekday;i++)
{
count++;
printf("\t");
}
for(i=1;i<=days;i++)
{
count++;
printf("%d\t",i);
if(count%7==0)
{
printf("%d\n",num++);
}
}
if(count%7!=0)
{
int a=count;
for(;a%7!=0;a++)
printf("\t");
printf("%d\n",num);
}
printf("\n");
}
void displayYear(int year)//输出某年的日历
{
int i;
for(i=1;i<=12;i++)
{
displayYearMonth(year,i);
}
}
int main()
{
int year;
while(~scanf("%d",&year))
{
num=1;
displayYear(year);
}
return 0;
}