【Zeller公式计算星期几】HDU 6112 今夕何夕

acm.hdu.edu.cn/showproblem.php?pid=6112

【思路】

公式计算即可,注意特判2月29号

Zeller公式里,计算出的week不能直接模7,要保证week是正数

【AC】

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<algorithm>
 6 #include<cmath>
 7 
 8 using namespace std;
 9 
10 bool leap(int y)
11 {
12     if(y%400==0) return true;
13     if(y%4==0&&y%100!=0) return true;
14     return false;
15 }
16 int Zeller(int y,int m,int d)
17 {
18        if(m==1||m==2)
19        {
20          y--;
21         m+=12;          
22     }
23     int c=y/100;
24     y-=c*100;
25     int w=y+y/4+c/4-2*c+26*(m+1)/10+d-1;
26     while(w<0) w+=7;
27     w%=7;
28     return w;
29 }
30 int main()
31 {
32     int T;
33     scanf("%d",&T);
34     while(T--)
35     {
36         int y,m,d;
37         scanf("%d-%d-%d",&y,&m,&d);
38         int week=Zeller(y,m,d);
39         while(1)
40         {
41             y++;
42             if(m==2&&d==29)
43             {
44                 if(leap(y)&&Zeller(y,m,d)==week)
45                 {
46                     printf("%d
",y);
47                     break;
48                 }
49             }
50             else
51             {
52                 if(Zeller(y,m,d)==week)
53                 {
54                     printf("%d
",y);
55                     break;
56                 }
57             }
58         }
59     }
60     return 0;
61 }
Zeller
原文地址:https://www.cnblogs.com/itcsl/p/7354295.html