description

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

Input

有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD

Output

每组数据输出一行,即日期差值

Sample Input Copy

20130101
20130105

Sample Output Copy

5

idea

  • 闰年:2月29天,一年366天
    平年:2月28天,一年365天
    判断平年or闰年:
    能被4整除但不能被100整除 或者 能被400整除为闰年,
    否则为平年
  • 注意日期相同为一天
    例如20220107-20220107相差一天(7号共一天
    20220107-20220108相差两天(7号和8号共两天

solution1

#include <cstdio>
#include <algorithm>
using namespace std;
bool leap(int i){
if(i % 400 == 0 || (i % 4 == 0 && i % 100 != 0))
return true;
else
return false;
}
int main(){
int t[2], y[2], m[2], d[2], day, month[7] = {1, 3, 5, 7, 8, 10, 12}, temp, flag, flag1;
while(scanf("%d%d", &t[0], &t[1]) != EOF){
flag = 1;
temp = 0;
if(t[0] > t[1])
swap(t[0], t[1]);
for(int i = 0; i < 2; i++){
y[i] = t[i] / 10000;
m[i] = t[i] % 10000 / 100;
d[i] = t[i] % 100;
}
day = (y[1] - y[0])*365;
for(int i = y[0]; i < y[1]; i++)//闰年366天,多一天
if(leap(i))
day++;
if(m[0] > m[1]){
flag = -1;
swap(m[0], m[1]);
swap(y[0], y[1]);
}
for(int i = m[0]; i < m[1]; i++){
flag1 = 0;
for(int j = 0; j < 7; j++){
if(i == month[j]){
temp += 31;
flag1 = 1;
break;
}
}
if(i == 2 && !flag1){
if(leap(y[1]))
temp += 29;
else
temp += 28;
}
else if(!flag1)
temp += 30;
}
day += flag*temp + d[1] - d[0] + 1;
printf("%d\n", day);
}
return 0;
}

solution2

#include <cstdio>
#include <algorithm>
using namespace std;
int leap(int i){
if(i % 400 == 0 || (i % 4 == 0 && i % 100 != 0))
return 0;
else
return 1;
}
int main(){
int t[2], y[2], m[2], d[2], day, month[13][2] = {{0}, {31, 31}, {29, 28}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}, {31, 31}, {30, 30}, {31, 31}, {30, 30}, {31, 31}};
while(scanf("%d%d", &t[0], &t[1]) != EOF){
int temp = 0, flag = 1;
if(t[0] > t[1])
swap(t[0], t[1]);
for(int i = 0; i < 2; i++){
y[i] = t[i] / 10000;
m[i] = t[i] % 10000 / 100;
d[i] = t[i] % 100;
}
day = (y[1] - y[0])*365;
for(int i = y[0]; i < y[1]; i++)//闰年366天,多一天
if(!leap(i))
day++;
if(m[0] > m[1]){
flag = -1;
swap(m[0], m[1]);
swap(y[0], y[1]);//需要相应年份判断平闰
}
while(m[0] < m[1]){
temp += month[m[0]][leap(y[1])];
m[0]++;
}
day += flag*temp + d[1] - d[0] + 1;
printf("%d\n", day);
}
return 0;
}

codeup之日期差值的更多相关文章

  1. 题目1096:日期差值(a-b=(a-c)-(b-c))

    http://ac.jobdu.com/problem.php?pid=1096 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每 ...

  2. 九度OJ 1096:日期差值 (日期计算)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8138 解决:2752 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据, ...

  3. 九度oj 题目1096:日期差值

    题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行, ...

  4. Android 获取当前日期距离过期时间的日期差值的完整方法直接使用

    /*** * 获取当前日期距离过期时间的日期差值 * @param endTime * @return */public String dateDiff(String endTime) { Strin ...

  5. Hibernate中HQL的日期差值计算,可计算相差多少秒

    最近有个业务需求就是计算订单创建时间离现在超过 4 小时的订单都查找出来! 那么就需要用到日期函数了. 网上找了一下总共的日期函数有一下几个: CURRENT_DATE() 返回数据库当前日期 时间函 ...

  6. MVC 下 ajax调用 日期差值计算

    背景: 服务项目已有服务期起止时间From-To 现在要根据用户输入的新的起始时间, 和该服务期的原有区间值, 计算出新的服务期截止时间 即 NewServiceToDateTime = NewSer ...

  7. 关于Java中计算日期差值不准确问题

    1.字符串日期相减 如:2016-4-1,必须先将此字符串转成Date对象,并且, 格式必须为:yyyy—MM—dd  HH:mm:ss. 如果不转就直接计算(2016-4-1)两个这样的日期,则误差 ...

  8. PHP中比较两个时间的大小与日期的差值

    在这里我们全用到时间戳 mktime(hour,minute,second,month,day,year,[is_dst])     其参数可以从右向左省略,任何省略的参数都会被设置成本地日期和时间的 ...

  9. php 日期 - 计算2个日期的差值

    /** * 日期-计算2个日期的差值 * @return int */ public function get_difference($date, $new_date) { $date = strto ...

  10. javascript 计算两个日期的差值

    代码 Typescript版 /** * TimeSpan just like the class TimpSpan in C# ,represent the time difference * @c ...

随机推荐

  1. 火爆的 幻兽帕鲁/Palworld 单机➕联机 电脑游戏 免费畅游

    在广阔的世界中收集神奇的生物"帕鲁",派他们进行战斗.建造.做农活,工业生产等,这是一款支持多人游戏模式的全新开放世界生存制作游戏. ▼补丁主要内容 ・修复加载世界数据时,加载画面 ...

  2. 使用DeepSeek-R1分析电影票房

    最近在学习DeepSeek-R1本地化部署的相关知识,看到了1个比较有意思的视频. 在该视频中,其主要逻辑就是当用户上传1个Excel后,之后就可以通过交互式的方式对这个Excel中的数据进行分析.但 ...

  3. 迅速理解 LCS 最长公共子序列问题

    在算法与数据结构的经典问题中,最长公共子序列(Longest Common Subsequence,简称 LCS)问题占据着重要的地位.给定两个序列,我们需要找到它们最长的公共子序列,而子序列要求保持 ...

  4. 谜一般的js,迷一般的console

    问题的来源,是关于事件对象的currentTarget的讨论,currentTarget是什么,嗯,很简单就是绑定了监听函数,并且当前监听函数正在执行的那个dom元素.本着踏实,实事求是,严以律己的态 ...

  5. NumPy学习5

    今天学习了11, NumPy数组元素增删改查NumPy 数组元素的增删改查操作,主要有以下方法:数组元素操作方法函数名称 描述说明resize 返回指定形状的新数组.append 将元素值添加到数组的 ...

  6. vue学习二(过滤器)

    过滤器常用户来处理文本格式化的操作  过滤器还可以用在两个地方:花括号和v-bind 表达式 1.全局过滤器 {{user.gender|gfilter}} Vue.filter("gfil ...

  7. Netty源码—1.服务端启动流程

    大纲 1.服务端启动整体流程及关键方法 2.服务端启动的核心步骤 3.创建服务端Channel的源码 4.初始化服务端Channel的源码 5.注册服务端Channel的源码 6.绑定服务端端口的源码 ...

  8. cxDBTreeList:最简单的节点图标添加方法

    先在窗体上放ImageList关联到cxDBTreeList,在cxDBTreeList的GetNodeImageIndex事件中写如下: procedure cxDBTreeList1GetNode ...

  9. CSS那些事读书笔记-1

    背景 作为一个后端开发,曾经尝试过学习前端,但是总觉不得要领,照猫画虎,而公司里又有专业的前端开发,工作中几乎接触不到实际的前端任务,所以前端的技能田野一直是一片荒芜.但是笔者深知前端的技能对找工作和 ...

  10. RESTful的连接时间超时时间设定

    dsResrful的连接方式时,如何设定timeout呢? DSRestConnection.HTTP.ConnectTimeout := 5000; 就这么简单.因为封装的indy的TidHTTP. ...