日期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年的天数总和了.


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


相关文章
【知识分享】Java获取当前日期是第几周且本周是几号到几号
【知识分享】Java获取当前日期是第几周且本周是几号到几号
257 0
|
10月前
|
数据处理 Python
Python基础教程——日期与时间
Python基础教程——日期与时间
|
10月前
|
存储 JavaScript 前端开发
uniapp获取一周日期和星期
uniapp获取一周日期和星期
247 0
|
数据库 Python
第一天内容
第一天内容
Zp
|
Oracle 关系型数据库
oracle 获取指定日期的第一天和最后一天和上个月的第一天和最后一天及当年第一天和当年最后一天
oracle 获取指定日期的第一天和最后一天和上个月的第一天和最后一天及当年第一天和当年最后一天
Zp
257 0
|
弹性计算 缓存 Linux
第一天笔记
一.创建资源(实例) 二.远程连接ECS服务器 三.安装vsftpd 四.配置vsftpd 五.客户端测试
周末分享:如何在一周内摸清一个行业
 在和咨询、投行、投资、猎头这些行业的人聊天的时候,我反复听到“一周”这个时间,于是我也开始好奇:你们是在什么情况下需要在一个星期之内了解一个行业?你们都是如何做到在一个星期之内摸清一个行业的? 在一周之内“摸清”一个行业依然不可能成为这个行业的顶尖专家,也不可能成为这个行业的一个高管。
924 0
获取下周的周一日期
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.
551 0
一周见闻_v2
标签:生活事件 又要记录事件了,我思想高度达不到啊,看《社会认知》这本书,整理整理,仔细看看,发现看到的内容,道理大部分人都知道的差不多,不过书上语句更优美,语言说的更好。