美文网首页
算法提高-日期计算

算法提高-日期计算

作者: 嘉敏的豆子 | 来源:发表于2018-03-26 14:55 被阅读0次

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

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

#include <stdio.h>
#include <iostream>
#include <cmath>
#include <string>
#include <algorithm>
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;i++){
            if(leap(i)) days+=366;
            else days+=365;
        }
    }
    return days;
}
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int getM(int yyyy,int mm,int day){
    int sum = 0;
    if(leap(yyyy)) month[2] = 29;
    for(int i=1;i<mm;i++)
    {
        sum+=month[i];
    }
    sum=sum+day-1;
    return sum;
}

int main(){
    int yyyy,mm,dd;
    cin >> yyyy >> mm >> dd;
    ll sum = getY(yyyy);
//    cout<<sum<<endl;
    int w;
    if(yyyy<2011){
        sum = sum - getM(yyyy,mm,dd);
//        cout<<sum<<endl;
        w = ((sum % 7) == 6) ? 7 : 6 - (sum % 7);
        cout << w << endl;
    }
    else{
        sum = sum + getM(yyyy,mm,dd);
        w = (6 + (sum % 7) )>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

相关文章

  • 算法提高-日期计算

    给定一个时间计算它是星期几题目中给的是2011.11.11是星期五,后来我在网上看教程的时候,有提到2011.1....

  • 计算总借款天数(DAYS360函数)

    使用DAYS360函数可以按照一年360天的算法计算出两个日期间相差的天数。因此本例中根据借款日期、应还日期来计算...

  • 计算日期的不常用算法

    计算month个月后的最后一天 获取某个月的所有的date,如果是str=@"",计算的是今天到月底的date,s...

  • 常用排序算法总结(C++实现)

    常用排序算法总结 概述 在计算机科学中,排序算法是一种重要的操作。合理的排序算法能够大幅度提高计算机处理数据的性能...

  • TM的项目——CEED

    目的: 为未来的计算architecture(GPU),提供state of art的离散算法,提高硬件的使用效率...

  • 算法与数据结构-时间复杂度

    1、算法效率的度量方法 “刚才我们提到设计算法要提高效率。这里效率大都指算法的执行时间。那么我们如何度量一个算法的...

  • 计算日期

    function ChooseType(date, n) { var str = date; // 转换文本的日期...

  • 并行算法:如何利用并行处理提高算法的执行效率?

    算法的目的就是为了提高代码执行的效率。当算法无法再继续优化的情况下,需要借助并行计算的处理思想对算法进行改造 并行...

  • 一个提高GPU模糊算法的速度的方法

    一个提高GPU模糊算法的速度的方法 我们知道,模糊算法,比如高斯模糊是卷积算法的一种应用。计算图像中一个像素的模糊...

  • 算法--八大排序

    排序重要性 在计算机编程的过程中,需要学习很多的算法,了解算法的设计与原理可以帮助我们提高自身的编程素养。学习算法...

网友评论

      本文标题:算法提高-日期计算

      本文链接:https://www.haomeiwen.com/subject/gmdrcftx.html