计算两个日期之间的天数
总时间限制: 1000ms 内存限制: 65536kB
描述
给定两个日期,计算相差的天数。比如2010-1-1和2010-1-3相差2天。
输入
共两行:
第一行包含三个整数startYear,startMonth,startDay,分别是起始年、月、日。
第二行包含三个整数endYear,endMonth,endDay,分别是结束年、月、日。
相邻两个整数之间用单个空格隔开。年份范围在1~3000。保证日期正确且结束日期不早于起始日期。
输出
输出一个整数,即是两个日期相差的天数。
样例输入
2008 1 1 2009 1 1样例输出
366提示
闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。闰年的2月份有29天。
本题主要的难点在于需要分情况讨论。
首先需要讨论起止年是否在同一年,如果是在同一年,则还需要讨论其起止月是否包含2月;如果起止年不在同一年,则需要讨论起始年月份在2月前和2月后,以及终止年月份在2月前和2月后。
具体代码如下:
#include <iostream>using namespace std;bool isLeap(int x)
{if(x % 4 == 0 && ! (x % 400 != 0 && x % 100 == 0)){return true;}return false;
}int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int main(){int startYear, startMonth, startDay;int endYear, endMonth, endDay;cin >> startYear >> startMonth >> startDay;cin >> endYear >> endMonth >> endDay;int ans = 0;//如果是同一年if(startYear == endYear){if(startMonth == endMonth){ans = endDay - startDay;}else{for(int i = startMonth + 1; i < endMonth; i ++){ans += month[i];}ans += month[startMonth] - startDay + endDay;//如果是闰年if(isLeap(startYear)){//判断起止月是否包含2月if(startMonth <= 2 && endMonth > 2){ans += 1;}}}}else{//计算两个年份之间年份的总天数for(int i = startYear + 1; i < endYear; i ++){ans += 365;if(isLeap(i))ans += 1;}//计算起始年份的总天数for(int i = startMonth + 1; i <= 12; i ++){ans += month[i];}ans += month[startMonth] - startDay;//特殊判断起始月份如果在2月之前(包括2月),在闰年的情况下,天数需要加1if(isLeap(startYear)){if(startMonth <= 2){ans += 1;}}//计算终止年份的天数for(int i = 1; i < endMonth; i ++){ans += month[i];}ans += endDay;//特殊判断终止月份如果在2月之后(不包括2月),在闰年的情况下,天数需要加1if(isLeap(endYear)){if(endMonth > 2){ans += 1;}}}cout <<ans <<endl;return 0;
}
当然因为考试已经完了,考试的时候我没做出来,这会回宿舍写的,也不知道写的对不对,poj上没找到原题提交测试。如有错误,还望指出。
计算两个日期之间的天数相关推荐
- 如何利用计算机计算天数,如何应用Win10系统电脑中的计算器计算两个日期之间的天数?...
如何应用Win10系统电脑中的计算器计算两个日期之间的天数? 相信很多小伙伴都有在使用windows10系统的电脑,其中的计算器如何才能用来计算两个日期之间的天数呢?方法很简单,下面小编就来为大家介绍 ...
- 微软面试题目(一) 计算两个日期之间的天数
微软的面试,没能参加啊,只好打听了下题目,其中一题是在20分钟内写出:计算两个日期之间天数的方法.昨天晚上想了一下,今天实现了一下,经过调试,差不多一个小时才弄好,惭愧啊 代码如下: /******* ...
- sql年月日加减法,计算两个日期之间的天数
1.年月日加减法(时间字段为 hiredate,表名为 emp) DB2 selecthiredate -5 day as hd_sub_5day,hiredate +5 day as hd_add ...
- 计算两个日期之间的天数,你知道哪些函数能够计算呢?
有时候我们需要计算两个日期之间的天数,一般情况下只需要计算一两个的话可以直接口算,但是整个表格的日期都需要计算出他们之间的天数,还是用口算的方法吗?当然不能这么浪费时间!Excel中有计算两个日期之间 ...
- java怎么计算相隔多少天_java计算两个日期之间相差天数和相隔天数详解
大家看到文章标题"两个日期之间相差天数和相隔天数",是否有疑惑呢!从中文字面理解,"相差"和"相隔"是有区别的,然而就是这些区别害死很多人, ...
- JavaScript:实现计算两个日期之间的天数算法(附完整源码)
JavaScript:实现计算两个日期之间的天数算法 const isLeap = (year) => {if (year % 400 === 0) return trueelse if (ye ...
- Go获取n天前或后的日期、日期转秒时间戳、计算两个日期之间的天数差
获取n天前或后的日期: // GetBeforeTime 获取n天前的秒时间戳.日期时间戳 // _day为负则代表取前几天,为正则代表取后几天,0则为今天 func GetBeforeTime(_d ...
- php 求两个日期之间的天数_php计算两个日期之间的天数
php计算两个日期之间的天数2017-12-21 14:29 我有两个日期: 开始日期: 2007-03-24 结束日期: 2009-06-26 现在我需要找到这两者之间的区别在以下形式: 2年,3个 ...
- datediff函数,计算两个日期之间的天数\月数\年数
datedif函数是一个隐藏函数但又确实存在,可以计算两个日期之间的天数\月数\年数. 时分秒转换为数字格式后的数字代表的是天数. datedif 年数.月数.日数 返回年数月数日数 =DATEDIF ...
- 计算两个日期之间的天数(C语言实现)
计算两个日期之间的天数(C语言实现) #include <stdio.h> int date(int n,int m1,int d1,int m,int m2,int d2) {int i ...
最新文章
- CNCF 云原生系列文章
- Android Native crash 处理案例分享
- 垃圾回收机制之标记压缩算法与分代算法
- Leet Code OJ 21. Merge Two Sorted Lists [Difficulty: Easy]
- mysql服务不能启动的几大原因
- C++总结笔记(七)—— 运算符重载
- VS Code 批量操作
- Spring 框架基础(05):事务管理机制,和实现方式
- 大数据是如何基于 Flink 进行实时计算的?
- Vue实现的问题解决方案的查询文库
- C/C++操作注册表键值添加/查询/删除详解
- iMX8MP方案推荐|一款适用于心电监护仪的嵌入式核心板
- 毕索大学计算机科学怎么样,毕索大学与麦吉尔大学哪个好
- 物联网发展历史了解吗?带你看物联网节点
- UNH-IOL获批成为首家获得OVP认证的第三方实验室
- 存储卡中各种文件夹用处
- 知识分享|增值电信业务经营许可证常见问题解答
- 浅谈推荐系统之内容推荐
- Ideas Of MySelf 20005-07-26
- 什么是期权激励_理解激励股票期权的快速指南