2-计算星期几(基姆拉尔森计算公式)

/*1基姆拉尔森计算公式:

Week=(Day + 2*Month + 3*(Month+1)/5 + Year + Year/4 - Year/100 + Year/400) % 7
(其中的Year是4位数的,如2009。“%”号是等式除7取余数)
注意:
i. 该公式中要把1月和2月分别当成上一年的13月和14月处理。
例如:2008年1月4日要换成 2007年13月4日带入公式。
ii.该式对应的与蔡勒公式有点区别:“0”为星期1,……,“6”为星期日。
改进:
该式可能与蔡勒公式的计算都是较为复杂,但有改进的地方:对于世纪这个概念不被引用,
直接就是计算年代数(4位数)的!既不用再把 世纪 和 年代数(后两位)分开
*/
#include <cstdio>
#include <iostream>
using namespace std;

int main(){
//    ios::sync_with_stdio(false);
    int y, m, d;
//    while(cin >> y){     //超时了
//        cin >> m >> d;
    while(~scanf("%d%d%d", &y, &m, &d)){  
        if(m == 1 || m == 2){
            y--;
            m += 12;
        }    
        int w = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400 + 1) % 7;

//        cout << w << endl;
        printf("%d ", w);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/7384353.html