总时间限制:   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上没找到原题提交测试。如有错误,还望指出。

计算两个日期之间的天数相关推荐

  1. 如何利用计算机计算天数,如何应用Win10系统电脑中的计算器计算两个日期之间的天数?...

    如何应用Win10系统电脑中的计算器计算两个日期之间的天数? 相信很多小伙伴都有在使用windows10系统的电脑,其中的计算器如何才能用来计算两个日期之间的天数呢?方法很简单,下面小编就来为大家介绍 ...

  2. 微软面试题目(一) 计算两个日期之间的天数

    微软的面试,没能参加啊,只好打听了下题目,其中一题是在20分钟内写出:计算两个日期之间天数的方法.昨天晚上想了一下,今天实现了一下,经过调试,差不多一个小时才弄好,惭愧啊 代码如下: /******* ...

  3. sql年月日加减法,计算两个日期之间的天数

    1.年月日加减法(时间字段为  hiredate,表名为 emp) DB2 selecthiredate -5 day as hd_sub_5day,hiredate +5 day as hd_add ...

  4. 计算两个日期之间的天数,你知道哪些函数能够计算呢?

    有时候我们需要计算两个日期之间的天数,一般情况下只需要计算一两个的话可以直接口算,但是整个表格的日期都需要计算出他们之间的天数,还是用口算的方法吗?当然不能这么浪费时间!Excel中有计算两个日期之间 ...

  5. java怎么计算相隔多少天_java计算两个日期之间相差天数和相隔天数详解

    大家看到文章标题"两个日期之间相差天数和相隔天数",是否有疑惑呢!从中文字面理解,"相差"和"相隔"是有区别的,然而就是这些区别害死很多人, ...

  6. JavaScript:实现计算两个日期之间的天数算法(附完整源码)

    JavaScript:实现计算两个日期之间的天数算法 const isLeap = (year) => {if (year % 400 === 0) return trueelse if (ye ...

  7. Go获取n天前或后的日期、日期转秒时间戳、计算两个日期之间的天数差

    获取n天前或后的日期: // GetBeforeTime 获取n天前的秒时间戳.日期时间戳 // _day为负则代表取前几天,为正则代表取后几天,0则为今天 func GetBeforeTime(_d ...

  8. php 求两个日期之间的天数_php计算两个日期之间的天数

    php计算两个日期之间的天数2017-12-21 14:29 我有两个日期: 开始日期: 2007-03-24 结束日期: 2009-06-26 现在我需要找到这两者之间的区别在以下形式: 2年,3个 ...

  9. datediff函数,计算两个日期之间的天数\月数\年数

    datedif函数是一个隐藏函数但又确实存在,可以计算两个日期之间的天数\月数\年数. 时分秒转换为数字格式后的数字代表的是天数. datedif 年数.月数.日数 返回年数月数日数 =DATEDIF ...

  10. 计算两个日期之间的天数(C语言实现)

    计算两个日期之间的天数(C语言实现) #include <stdio.h> int date(int n,int m1,int d1,int m,int m2,int d2) {int i ...

最新文章

  1. CNCF 云原生系列文章
  2. Android Native crash 处理案例分享
  3. 垃圾回收机制之标记压缩算法与分代算法
  4. Leet Code OJ 21. Merge Two Sorted Lists [Difficulty: Easy]
  5. mysql服务不能启动的几大原因
  6. C++总结笔记(七)—— 运算符重载
  7. VS Code 批量操作
  8. Spring 框架基础(05):事务管理机制,和实现方式
  9. 大数据是如何基于 Flink 进行实时计算的?
  10. Vue实现的问题解决方案的查询文库
  11. C/C++操作注册表键值添加/查询/删除详解
  12. iMX8MP方案推荐|一款适用于心电监护仪的嵌入式核心板
  13. 毕索大学计算机科学怎么样,毕索大学与麦吉尔大学哪个好
  14. 物联网发展历史了解吗?带你看物联网节点
  15. UNH-IOL获批成为首家获得OVP认证的第三方实验室
  16. 存储卡中各种文件夹用处
  17. 知识分享|增值电信业务经营许可证常见问题解答
  18. 浅谈推荐系统之内容推荐
  19. Ideas Of MySelf 20005-07-26
  20. 什么是期权激励_理解激励股票期权的快速指南

热门文章

  1. March 18: Mac恶意软件警告
  2. 基于matlab工具的电力系统故障分析,基于Matlab工具的电力系统故障分析
  3. 我和王争学设计模式 |单例模式
  4. DNG格式与RAW格式的区别
  5. 外国小哥总结各国旅行好用App,中国区榜首心服口服
  6. 图文详解基于角色的权限控制模型RBAC
  7. OUC2021软件工程OUC校园拼车程序小组第六周Scrum Meeting记录
  8. 团队和技术建设的方法论
  9. 2021年高处安装、维护、拆除免费试题及高处安装、维护、拆除试题及解析
  10. 中国还有几家达到CMM5了?