算法提高-日期计算

给定一个时间计算它是星期几
题目中给的是2011.11.11是星期五,后来我在网上看教程的时候,有提到2011.1.1是周六,那我们就先按周六来算

//
//  日期计算.cpp
//  Lanqiao
//
//  Created by 刘嘉敏 on 2018/3/24.
//  Copyright © 2018年 JiaminLiu. All rights reserved.
//

#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long  ll;
bool leap(int y){
    if(y % 4 == 0 && y % 100 != 0) return true;
    if(y % 400 == 0) return true;
    return false;
}
ll getY(int yyyy){
    ll days=0;
    if( yyyy<=2011 ){
        while(yyyy!=2011){
            if(leap(yyyy)) days += 366;
            else days+=365;
            yyyy++;
        }
    }
    else {
        for(int i=2011;i> yyyy >> mm >> dd;
    ll sum = getY(yyyy);
//    cout<7 ? ((6 + (sum % 7))%7) : (6 + (sum % 7));
        cout << w << endl;
    }
    return 0;
}

这道题开始一直拿不了满分,后来发现是在一个if-else出现了问题,即是else中包括了year为2011的情况,所以说还是要细心。

在网上还看到了一个计算星期的公式,
基姆拉尔森计算公式:
  W= (d+2m+3(m+1)/5+y+y/4-y/100+y/400+1)%7
  (需要使用switch...case语句判断星期几)
改进:
  W= (d+2m+3(m+1)/5+y+y/4-y/100+y/400)%7+1
  (计算出的结果直接是对应的星期几)
注意:
  当month=1或2时,需要将其改为month+12并且year-1

他是这样写的,不过我还没试过,先放上链接吧https://www.cnblogs.com/maxin/p/5806615.html

你可能感兴趣的:(算法提高-日期计算)