日期0~y年的日子

简介: 日期0~y年的日子

日期差值

image.png


主要记录一下日期的算法,老师作业的日期算法惊艳到我了.

先看看老师的代码

#include <iostream>
using namespace std;
/*
*思路:
* 1. 分别求出每一个日期与0000年0月1日距离的天数
* 2. 两个距离天数相减即可得到两个日期相差的天数
*/
//平年从1月到n月的天数
int mon[12] = { 0,31,59,90,120,151,181,212,243,273,304,334 };
//给出年月日,计算距离0000年0月1日的天数和
int CountDay(int y, int m, int d)
{
  // 计算0-y年的天数
  int yearDay = y * 365 + y / 4 - y / 100 + y / 400;
  // 计算到0-m月的天数
  int monthDay = mon[m - 1];
  if (m > 2 && ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0))
    monthDay += 1;
  return yearDay + monthDay + d;
}
int main()
{
  int year1, month1, day1;
  scanf("%4d%2d%2d", &year1, &month1, &day1);
  int n1 = CountDay(year1, month1, day1);
  int year2, month2, day2;
  scanf("%4d%2d%2d", &year2, &month2, &day2);
  int n2 = CountDay(year2, month2, day2);
  cout << abs(n1 - n2) + 1 << endl;//abs返回n1和n2相减后的绝对值
}

主要是CountDay()函数的实现非常的棒.主要是int yearDay = y * 365 + y / 4 - y / 100 + y / 400;年的计算非常棒,我们来看看.


我们就以2000这个来讲述把我们先得到所有普通的年的天数,再算闰年情况.


闰年判断条件如下:


能被4整除却不能被100整除或能被400整除的年份就是闰年!


我们先得到能被4整除的数+ y / 4


再减去能被100整除的数- y / 100


再得到能被400整除的数+ y / 400


最后就是我们0~y年的天数总和了.


其他部分的讲解放在注释中了.


相关文章
|
11月前
|
人工智能 Serverless API
云原生应用开发平台CAP评测
CAP(Cloud Application Platform)是阿里云提供的一站式应用开发及管理平台,集成了Serverless计算、AI应用模板、先进开发者工具和企业级应用管理功能。本文结合官方文档与实际操作,全面评测了CAP的产品优势、实际操作体验及性能表现,展示了其在降低成本、提高开发效率和灵活性方面的卓越能力。
476 10
|
11月前
|
安全 网络安全 开发者
概述HTTP请求方法
【10月更文挑战第19天】HTTP定义了一组方法,包括GET、HEAD、PUT、POST、TRACE、OPTIONS和DELETE等。GET和HEAD被认为是安全的,不会在服务器上产生结果。GET用于请求资源,HEAD则仅请求资源的头部信息。PUT用于上传文件,POST用于提交数据,TRACE用于诊断请求路径上的修改情况,OPTIONS查询服务器支持的功能,DELETE请求删除资源。此外,HTTP还支持扩展方法,以适应新特性的发展。
|
机器学习/深度学习 人工智能 安全
AI时代:程序员如何重塑核心竞争力
【8月更文第5天】近年来,人工智能(AI)和生成式预训练模型(AIGC)的飞速发展对软件开发行业产生了深远的影响。ChatGPT、Midjourney、Claude 等大语言模型的出现,不仅极大地提高了编程效率,还改变了程序员的工作方式。随着AI辅助编程工具的日益普及,程序员们面临着前所未有的机遇与挑战。本文旨在探讨在AI时代,程序员应如何调整自己的职业路径和发展策略,以保持和提升自身的竞争力。
1095 0
|
SQL XML Java
[Java Web]Mybatis->超八千字详细介绍,带你由浅入深认识了解mybatis(上)
[Java Web]Mybatis->超八千字详细介绍,带你由浅入深认识了解mybatis
181 0
|
Oracle 关系型数据库 Java
实时计算 Flink版产品使用问题之如何启动多个jar包来监听同一个数据库的binlog,并针对不同的业务进行处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
Linux C++
认识Linux指令之 “ 重定向” 符号
认识Linux指令之 “ 重定向” 符号
222 1
认识Linux指令之 “ 重定向” 符号
|
存储 编解码 安全
阿里云服务器五代、六代、七代、八代实例规格与经济型e和通用算力型u1实例介绍
阿里云服务器实例规格经过多次升级之后,目前已经推出了最新的第八代云服务器,当下主售的云服务器实例也以及从以往的六代七代过渡到七代和八代为主,同时还有通用算力型及经济型这些刚推出不久的新品云服务器实例,对于有的新手用户来说,并不是很清楚阿里云五代、六代、七代、八代云服务器的实例规格具体有哪些,以及它们之间有何区别,最新一代相比于上一代在性能上有何提升。本文对阿里云五代、六代云服务器实例规格做个简单介绍,同时对七代和八代云服务器做个重点介绍,以供大家参考。
阿里云服务器五代、六代、七代、八代实例规格与经济型e和通用算力型u1实例介绍
|
C语言 C++
【C进阶】内存函数
【C进阶】内存函数
99 0
|
Linux 开发工具 数据安全/隐私保护
​​Linux搭建GitLab私有仓库
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。 Gitlab是被广泛使用的基于git的开源代码管理平台, 基于Ruby on Rails构建, 主要针对软件开发过程中产生的代码和文档进行管理, Gitlab主要针对group和project两个维度进行代码和文档管理, 其中group是群组, project是工程项目, 一个group可以管理多个project, 可以理解为一个群组中有多项软件开发任务, 而一个project中可能包含多个branch, 意为每个项目中有多个分支, 分支间相互独立, 不同分支可以进行归并。
|
存储 算法
攻克数据结构和算法——第四天:字典
字典有顺序存储,链式存储和散列表示三种存储方式,其中,链式存储又有跳跃链表和树形结构两种方式存储。
190 0
攻克数据结构和算法——第四天:字典