【算法笔记(一)】之计算两个日期之差

2023-10-07 08:50

本文主要是介绍【算法笔记(一)】之计算两个日期之差,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文章由公号【开发小鸽】发布!欢迎关注!!!


老规矩–妹妹镇楼:

一. 题目

       输入两个日期,求两个日期之间的天数,如果两个日期是连续的,则规定他们之间的天数为两天。

输入格式:

       YYYYMMDD
       20130101
       20130505

输出个数:

       5

二. 思路

       要计算日期之间的天数,我们可以想到从小的日期开始不断加1天,直到小的日期等于大的日期为止。

       其中,当天数d等于当前的月份m的天数+1时,月份m就要+1,且天数d置为1;当月份m变为13时,则年份y就要+1,同时月份m置为1。

       注意,闰年的2月份天数为29天,平年的2月份天数为28天。

闰年的定义:
       闰年是公历中的名词。闰年分为普通闰年和世纪闰年。

       普通闰年:公历年份是4的倍数的,且不是100的倍数,为普通闰年。(如2004、2020年就是闰年);

       世纪闰年:公历年份是整百数的,必须是400的倍数才是世纪闰年(如1900年不是世纪闰年,2000年是世纪闰年);

       闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份为闰年。闰年共有366天,比平年多出的一天在2月份,为29天,平年为28天。

       设置二维数组 int month[13][2]存储闰年和平年的月份天数

三. 代码


#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
using namespace std;int month[13][2] = {{0,0},{31,31},{28,29}, {31,31}, {30,30}, {31,31}, {30,30},{31,31},{31,31},{30,30},{31,31}, {30,30}, {31,31}
};//判断是否是闰年
bool isLeap(int year)
{return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}int main()
{int time1, y1, m1, d1;int time2, y2, m2, d2;while ( scanf("%d%d",&time1, &time2)!= EOF){//如果第一个日期比第二个日期大,则交换if (time1 > time2){int temp = time1;time1 = time2;time2 = temp;}y1 = time1 / 10000;m1 = time1 % 10000 / 100;d1 = time1 % 100;y2 = time2 / 10000;m2 = time2 % 10000 / 100;d2 = time2 % 100;int ans = 1;	//记录天数// 不断加1,直到两个日期相等while (y1 < y2 || m1 < m2 || d1 < d2){d1++;//天数满了当前月份的天数+1if (d1 == month[m1][isLeap(y1)] + 1){m1++;d1 = 1;}//月份满了当前年份的月份数if (m1 == 13){y1++;m1 = 1;}ans++;		//记录天数+1}cout << ans << endl;}return 0;
}

这篇关于【算法笔记(一)】之计算两个日期之差的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/157329

相关文章

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

java两个List的交集,并集方式

《java两个List的交集,并集方式》文章主要介绍了Java中两个List的交集和并集的处理方法,推荐使用Apache的CollectionUtils工具类,因为它简单且不会改变原有集合,同时,文章... 目录Java两个List的交集,并集方法一方法二方法三总结java两个List的交集,并集方法一

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

springboot日期格式化全局LocalDateTime详解

《springboot日期格式化全局LocalDateTime详解》文章主要分析了SpringBoot中ObjectMapper对象的序列化和反序列化过程,并具体探讨了日期格式化问题,通过分析Spri... 目录分析ObjectMapper与jsonSerializer结论自定义日期格式(全局)扩展利用配置

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

对postgresql日期和时间的比较

《对postgresql日期和时间的比较》文章介绍了在数据库中处理日期和时间类型时的一些注意事项,包括如何将字符串转换为日期或时间类型,以及在比较时自动转换的情况,作者建议在使用数据库时,根据具体情况... 目录PostgreSQL日期和时间比较DB里保存到时分秒,需要和年月日比较db里存储date或者ti