1.我的做法是非常普遍的做法,在已知1年1月1日是星期1的情况下,我写了一个日期类,用这个类可以实现往后推出一天,于是我们通过计算当前到1年1月1日的天数,来计算星期几。
下面是我的代码:
/*
 * 219.cpp
 *
 *  Created on: 2013年8月12日
 *      Author: panzhizhou
 */
//计算某年某月是星期几的,1年1月1日 是星期一
#include<iostream>
using namespace std;
class date{
public:
int year,month,day;
date()
{
year=1;
month=1;
day=1;
}
date(int year,int month,int day){
this->year=year;
this->month=month;
this->day=day;
}
int isleap(int y){
if(y%400==0||(y%4==0&&(y%100)!=0))
return 1;
else
return 0;
}
void add_day(){
this->day++;
if(isleap(this->year)){
if(this->month==2){
if(this->day>29){
day=1;
month++;
}
}//
}//如果是闰年
else{
       if(this->month==2){
//不是闰年,2月就有28天
if(this->day>28){
this->day=1;
this->month++;
}
}//end if
}//end else
if(this->month==1||this->month==3||this->month==5||this->month==7||this->month==8||this->month==10||this->month==12){
if(this->day>31){
this->day=1;
this->month++;
}
}//end if
if(this->month==4||this->month==6||this->month==9||this->month==11){
if(this->day>30){
this->day=1;
this->month++;
}
}//end if
if(this->month>12){
this->month=1;
this->year++;
}
//return this;
}
};
int main()
{
int y,m,d;
//
while(cin>>y>>m>>d){
date d1=date(1600,1,1); //这一天是星期六
date d2=date(y,m,d);
int result=0;
while((d1.year!=d2.year)||(d1.month!=d2.month)||(d1.day!=d2.day)){
//
d1.add_day();
result++;
}
cout<<(result+6)%7<<endl;
}
}
2.下面是用到公式计算的某一天是星期几的:
#include<stdio.h>
int main()
{
    int d,m,y;
    while(scanf("%d%d%d",&y,&m,&d)!=EOF)
    {
        if(m>=1&&m<=2)
        {
            m+=12;
            y-=1;
        }
        printf("%d\n",(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7);
    }
    return 0;
}