注册 登录
编程论坛 C++教室

用蔡勒公式求星期几,得不到想要的结果,紧急

一路看天 发布于 2013-03-01 16:29, 412 次点击
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int y,m,d;
    while(cin>>y>>m>>d){
            if(y==0&&m==0&&d==0) break;
            if(y%400==0||(y%4==0&&y%100!=0))
            {  if(m==2&&(d<1||d>29)) {cout<<-1<<endl;continue;}
               if((m==4||m==6||m==9||m==11)&&(d<1||d>30)) {cout<<-1<<endl;continue;}
               if((m==1||m==3||m==5||m==7)&&(d<1||d>31)) {cout<<-1<<endl;continue;}
               if((m==8||m==10||m==12)&&(d<1&&d>31)) {cout<<-1<<endl;continue;}}
            else { if(m==2&&(d<1||d>28)) {cout<<-1<<endl;continue;}
                   if((m==4||m==6||m==9||m==11)&&(d<1||d>30)) {cout<<-1<<endl;continue;}
                   if((m==1||m==3||m==5||m==7)&&(d<1||d>31)) {cout<<-1<<endl;continue;}
                   if((m==8||m==10||m==12)&&(d<1&&d>31)) {cout<<-1<<endl;continue;}}
            if(m<3){ m=m+12;
                     y=y-1;}
            y=y%100;
            int w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
            switch(w+1){
                        case 0:cout<<7<<endl;break;
                        case 1:cout<<1<<endl;break;
                        case 2:cout<<2<<endl;break;
                        case 3:cout<<3<<endl;break;
                        case 4:cout<<4<<endl;break;
                        case 5:cout<<5<<endl;break;
                        case 6:cout<<6<<endl;break;}}
  
    return EXIT_SUCCESS;
}
目测蔡勒公式没用错啊,可就是得不到正确结果,请指点迷津
5 回复
#2
yuccn2013-03-01 16:38
        int w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
        switch(w+1){
            case 0:cout<<7<<endl;break;
            case 1:cout<<1<<endl;break;
            case 2:cout<<2<<endl;break;
            case 3:cout<<3<<endl;break;
            case 4:cout<<4<<endl;break;
            case 5:cout<<5<<endl;break;
            case 6:cout<<6<<endl;break;
        }
如果 w 为6的时候 w+1 就是7了,没有case 7;

case 0 估计是执行不到的
#3
yuccn2013-03-01 16:39
或者你把case 0 改成case 7 就ok 了
#4
一路看天2013-03-01 16:46
回复 3楼 yuccn
谢了,可以解决一部分问题,可还是没能通过
#5
yuccn2013-03-01 16:57
调试下吧
#6
Susake2013-03-01 17:00
。。。kk
1