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. Gradle的安装及换源详细教程

    Gradle是一个基于JVM的构建工具,用于自动化构建.测试和部署项目. 1. 安装Gradle a. 首先,确保你已经安装了Java Development Kit (JDK),并且已经配置了JAV ...

  2. MybatisPlus - [02] HelloWorld

    参考:https://www.cnblogs.com/haoxinyue/p/5208136.html(分布式系统唯一ID生成方案汇总) 一.准备工作 (1)创建数据库: create databas ...

  3. 【渗透测试】Vulnhub DarkHole

    渗透环境 攻击机:   IP: 192.168.216.129(Kali) 靶机:     IP:192.168.216.130 靶机下载地址:https://www.vulnhub.com/entr ...

  4. PHP 命名空间与spl_autoload_register() 自动加载机制

    转:https://www.cnblogs.com/chihuobao/p/9895202.html include 和 require 是PHP中引入文件的两个基本方法.在小规模开发中直接使用 in ...

  5. QTableView实现在表格内直接对数据库内容进行修改、新增和删除等操作

    文章目录 前言 QSqlTableModel 新增 删除 修改 提交 取消 前言 本文主要利用QSqlTableModel+QTableView来实现直接在QTableView中进行对数据库数据的操作 ...

  6. FastAPI依赖注入:参数共享与逻辑复用

    扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长 第一章:依赖注入核心原理 1.1 依赖树构建机制 from fastapi import Depends def auth_service ...

  7. Ubuntu安装配置redis

    更新安装相关依赖库 下面步骤一步一步来 sudo apt update sudo apt install build-essential sudo apt-get install manpages-d ...

  8. godoc使用方法介绍

    一.go doc简介 Godoc是go语言的文档化工具,类似于文档化工具godoc,类似于Python的Docstring和Java的Javadoc Godoc通过解析包含注释的Go代码来生成HTML ...

  9. PaddleOCR学习笔记2-初步识别服务

    今天初步实现了网页,上传图片,识别显示结果到页面的服务.后续再完善. 采用flask + paddleocr+ bootstrap快速搭建OCR识别服务. 代码结构如下: 模板页面代码文件如下: up ...

  10. Sublime Text 3汉化教程

    一.初始化插件仓库 ctrl+`(esc键下方那一个)打开控制台输入以下代码回车 import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df ...