codeup之日期差值
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之日期差值的更多相关文章
- 题目1096:日期差值(a-b=(a-c)-(b-c))
http://ac.jobdu.com/problem.php?pid=1096 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每 ...
- 九度OJ 1096:日期差值 (日期计算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8138 解决:2752 题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据, ...
- 九度oj 题目1096:日期差值
题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行, ...
- Android 获取当前日期距离过期时间的日期差值的完整方法直接使用
/*** * 获取当前日期距离过期时间的日期差值 * @param endTime * @return */public String dateDiff(String endTime) { Strin ...
- Hibernate中HQL的日期差值计算,可计算相差多少秒
最近有个业务需求就是计算订单创建时间离现在超过 4 小时的订单都查找出来! 那么就需要用到日期函数了. 网上找了一下总共的日期函数有一下几个: CURRENT_DATE() 返回数据库当前日期 时间函 ...
- MVC 下 ajax调用 日期差值计算
背景: 服务项目已有服务期起止时间From-To 现在要根据用户输入的新的起始时间, 和该服务期的原有区间值, 计算出新的服务期截止时间 即 NewServiceToDateTime = NewSer ...
- 关于Java中计算日期差值不准确问题
1.字符串日期相减 如:2016-4-1,必须先将此字符串转成Date对象,并且, 格式必须为:yyyy—MM—dd HH:mm:ss. 如果不转就直接计算(2016-4-1)两个这样的日期,则误差 ...
- PHP中比较两个时间的大小与日期的差值
在这里我们全用到时间戳 mktime(hour,minute,second,month,day,year,[is_dst]) 其参数可以从右向左省略,任何省略的参数都会被设置成本地日期和时间的 ...
- php 日期 - 计算2个日期的差值
/** * 日期-计算2个日期的差值 * @return int */ public function get_difference($date, $new_date) { $date = strto ...
- javascript 计算两个日期的差值
代码 Typescript版 /** * TimeSpan just like the class TimpSpan in C# ,represent the time difference * @c ...
随机推荐
- 火爆的 幻兽帕鲁/Palworld 单机➕联机 电脑游戏 免费畅游
在广阔的世界中收集神奇的生物"帕鲁",派他们进行战斗.建造.做农活,工业生产等,这是一款支持多人游戏模式的全新开放世界生存制作游戏. ▼补丁主要内容 ・修复加载世界数据时,加载画面 ...
- 使用DeepSeek-R1分析电影票房
最近在学习DeepSeek-R1本地化部署的相关知识,看到了1个比较有意思的视频. 在该视频中,其主要逻辑就是当用户上传1个Excel后,之后就可以通过交互式的方式对这个Excel中的数据进行分析.但 ...
- 迅速理解 LCS 最长公共子序列问题
在算法与数据结构的经典问题中,最长公共子序列(Longest Common Subsequence,简称 LCS)问题占据着重要的地位.给定两个序列,我们需要找到它们最长的公共子序列,而子序列要求保持 ...
- 谜一般的js,迷一般的console
问题的来源,是关于事件对象的currentTarget的讨论,currentTarget是什么,嗯,很简单就是绑定了监听函数,并且当前监听函数正在执行的那个dom元素.本着踏实,实事求是,严以律己的态 ...
- NumPy学习5
今天学习了11, NumPy数组元素增删改查NumPy 数组元素的增删改查操作,主要有以下方法:数组元素操作方法函数名称 描述说明resize 返回指定形状的新数组.append 将元素值添加到数组的 ...
- vue学习二(过滤器)
过滤器常用户来处理文本格式化的操作 过滤器还可以用在两个地方:花括号和v-bind 表达式 1.全局过滤器 {{user.gender|gfilter}} Vue.filter("gfil ...
- Netty源码—1.服务端启动流程
大纲 1.服务端启动整体流程及关键方法 2.服务端启动的核心步骤 3.创建服务端Channel的源码 4.初始化服务端Channel的源码 5.注册服务端Channel的源码 6.绑定服务端端口的源码 ...
- cxDBTreeList:最简单的节点图标添加方法
先在窗体上放ImageList关联到cxDBTreeList,在cxDBTreeList的GetNodeImageIndex事件中写如下: procedure cxDBTreeList1GetNode ...
- CSS那些事读书笔记-1
背景 作为一个后端开发,曾经尝试过学习前端,但是总觉不得要领,照猫画虎,而公司里又有专业的前端开发,工作中几乎接触不到实际的前端任务,所以前端的技能田野一直是一片荒芜.但是笔者深知前端的技能对找工作和 ...
- RESTful的连接时间超时时间设定
dsResrful的连接方式时,如何设定timeout呢? DSRestConnection.HTTP.ConnectTimeout := 5000; 就这么简单.因为封装的indy的TidHTTP. ...