C++日期差值问题(2个日期之间差几天)

news2024/9/23 23:30:53

上面是牛客网给出的题目。

思路

假设第一个输入的日期为2011 12 03,第二个输入的日期为2024 02 29。

这两个日期并不相等,我们可以让日期2011 12 03一直加1,直到等于2024 02 29为止。

在这个过程中,每+1一次,就让ret记录一次。

最后ret就是我们要的差值。

代码

首先我们要编写一个日期类,

这个类实现了+=,>,==,!=的重载,然后才能轻松编写上面思路的代码,

我的一篇博客讲了这个日期类的实现:http://t.csdnimg.cn/SMo8g

#include <cstdio>
#include <iostream>
#include <type_traits>
using namespace std;

class Date{
    public:
    Date(int y, int m, int d):
    _year(y),
    _month(m),
    _day(d){}
    int GetMonthDay(int year,int month)
    {
        static int a[13]={-1,31,28,31,30,31,30,31,31,30,31,30,31};
        if((month==2)&&((year%400==0)||(year%4==0&&year%100!=0)))
        {
            return 29;
        }
        return a[month];
    }
    Date& operator+=(int day)
    {
        _day+=day;
        while(_day>GetMonthDay(_year, _month))
        {
            _day-=GetMonthDay(_year, _month);
            ++_month;
            if(_month==13)
            {
                _month=1;
                ++_year;
            }
        }
        return *this;
    }

    bool operator>(const Date&d)
    {
        if(_year>d._year)
        {
            return true;
        }
        else if (_year==d._year&&_month>d._month) {
            return true;
        }
        else if (_month==d._month&&_day>d._day) {
            return true;
        }
        return false;
    }

    bool operator==(const Date&d)
    {
        return (_year==d._year)&&(_month==d._month)&&(_day==d._day);
    }

    bool operator!=(const Date&d)
    {
        return !(*this==d);
    }

    int operator-(const Date&d)
    {
        Date min=*this;
        Date max=d;
        if(*this>d)
        {
            min=d;
            max=*this;
        }

        int ret=1;
        while(min!=max)
        {
            min+=1;
            ++ret;
        }
        return ret;
    }
    private:
    int _year;
    int _month;
    int _day;
};

int main() {
    int y1,y2,m1,m2,d1,d2;
    scanf("%4d%2d%2d",&y1,&m1,&d1);
    scanf("%4d%2d%2d",&y2,&m2,&d2);
    Date date1(y1,m1,d1);
    Date date2(y2,m2,d2);
    cout<<date1-date2<<endl;
}
// 64 位输出请用 printf("%lld")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2090445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

情感共鸣:数业智能心大陆重塑AI心理交互新纪元

在科技蓬勃发展的今天&#xff0c;人工智能如同一张大网&#xff0c;与我们的生活密切交织&#xff0c;在多个层面深刻影响着每一个人。而数业智能心大陆&#xff0c;作为 “AI 心理健康” 领域的佼佼者&#xff0c;正以其独特的技术和创新理念&#xff0c; 为人工智能与用户的…

企业EMS - 能源管理系统 - 能源管理系统源码-能源在线监测平台-双碳平台源码

一、介绍 企业EMS - 能源管理系统 - 能源管理系统源码-能源在线监测平台-双碳平台源码’ 二、软件架构 二、功能介绍 三、数字大屏展示 四、数据采集原理 五、软件截图

C++ 有向图算法

概念 Breadth-First Search (BFS) 目的: 主要用于遍历或搜索图中的所有顶点。 特点: 从根节点开始&#xff0c;先访问所有与之相邻的节点&#xff0c;然后再一层一层地深入。 应用: 可以用来寻找两节点间的最短路径&#xff08;当边的权重相等时&#xff09;&#xff0c;检测…

笔记:应用Visual Studio Profiler分析CPU使用情况

一、目的&#xff1a;应用Visual Studio Profiler分析CPU使用情况 使用 Visual Studio Profiler 分析 CPU 使用情况可以帮助你识别性能瓶颈&#xff0c;优化代码&#xff0c;提高应用程序的响应速度。 二、实现 以下是如何使用 Visual Studio Profiler 分析 CPU 使用情况的详…

前端问答:如何判断变量是否为数组?

在JavaScript的世界里&#xff0c;判断一个变量的类型是开发者日常工作中不可或缺的一部分&#xff0c;尤其是在处理数组这种关键数据结构时。数组作为一种广泛应用于各种操作的数据结构&#xff0c;无论是简单的数据存储还是复杂的算法实现&#xff0c;都发挥着重要作用。然而…

力扣刷题--762. 二进制表示中质数个计算置位【简单】

题目描述&#x1f357; 给你两个整数 left 和 right &#xff0c;在闭区间 [left, right] 范围内&#xff0c;统计并返回 计算置位位数为质数 的整数个数。 计算置位位数 就是二进制表示中 1 的个数。 例如&#xff0c; 21 的二进制表示 10101 有 3 个计算置位。 示例 1&am…

【JPCS独立出版】2024电驱系统与控制工程国际学术研讨会(EDSCE 2024,10月18-20)

2024电驱系统与控制工程国际学术研讨会&#xff08;EDSCE 2024&#xff09;将于2024年10月18-20日在中国本溪隆重举行。 本次会议将集中讨论电驱系统与控制工程的最新研究成果&#xff0c;旨在建立一个高水平的学术交流平台&#xff0c;以便领域内的专家学者、工程师和技术研发…

【单片机原理及应用】实验: 8位数码显示器

目录 一、实验目的 二、实验内容 三、实验步骤 四、记录与处理 五、思考 六、成果文件提取链接 一、实验目的 学习8位数码管串行扩展原理&#xff0c;掌握74HC595与动态显示编程方法。 二、实验内容 【参照图表】 &#xff08;1&#xff09;创建一个包含80C51固件&#x…

如何选择适合企业的财税自动化解决方案

财税自动化解决方案是现代企业提升财务管理效率、降低运营成本的关键工具。然而&#xff0c;市场上的财税自动化产品琳琅满目&#xff0c;功能各异&#xff0c;企业在选择时常常感到困惑。本文金智维将从中小型的需求出发&#xff0c;帮助企业了解如何选择适合自身的财税自动化…

ASP.NET Core6.0-wwwroot文件夹无法访问解决方法

默认情况下&#xff0c;ASP.NET Core项目中的wwwroot文件夹被视为Web根文件夹。静态文件可以存储在Web根目录下的任何文件夹中&#xff0c;并可以使用该根目录的相对路径进行访问。在ASP.NET应用程序中&#xff0c;可以从应用程序的根文件夹或其下的任何其他文件夹提供静态文件…

数据分析学习之numpy

引言 好久没写帖子了&#xff0c;确实变懒了&#xff0c;在这一个月里学习了爬虫&#xff0c;还有seleium自动化技术初步以及数据分析中的numpy&#xff0c;下一步就要学习pandas,但是欠了太多帖子没写&#xff0c;所以现在来补一下&#xff0c;现在来的是numpy的学习&#xff…

Java面试宝典-java基础07

Java面试宝典-java基础07 61、什么是 java 序列化&#xff1f;什么情况下需要序列化&#xff1f;62、序列化使用场景有哪些&#xff1f;63、使用序列化和反序列化的注意事项64、为什么要使用克隆&#xff1f;如何实现对象克隆&#xff1f;深拷贝和浅拷贝区别是什么&#xff1f;…

计算机网络概述(分组延时、丢失和吞吐量)

目录 分组丢失和延时是怎样发生的&#xff1f; 四种分组延时 节点延时 排队延迟 分组丢失 吞吐量 吞吐量&#xff1a;互联网场景 分组丢失和延时是怎样发生的&#xff1f; 在路由器缓冲区的分组队列 分组到达链路的速率超过了链路输出的能力分组等待排队到队头、被传输…

Ethernet 测试系列(1)-- 物理层测试::IOP Test::Link-up time

车载以太网物理层IOP测试&#xff0c;即互操作性测试&#xff08;Interop- erability Tests&#xff09;&#xff0c;用于验证车载以太网PHY&#xff08;通常也称为收发器&#xff09;的可靠性和检查PHY能否在给定的有限时间内建立稳定的链路;还用于车载以太网PHY的诊断&#x…

ARCGIS 纸质小班XY坐标转电子要素面(2)

本章用于说明未知坐标系情况下如何正确将XY转要素面 背景说明 现有资料&#xff1a;清除大概位置&#xff0c;纸质小班图&#xff0c;图上有横纵坐标&#xff0c;并已知小班XY拐点坐标&#xff0c;但未知坐标系。需要上图 具体操作 大部分操作同这边文章ARCGIS 纸质小班XY…

Vue.js 模板语法详解:插值表达式与指令使用指南

Vue.js 模板语法详解&#xff1a;插值表达式与指令使用指南 引言 简要介绍主题&#xff1a; Vue.js 是一个现代化的 JavaScript 框架&#xff0c;用于构建用户界面。Vue 的模板语法提供了直观且功能强大的工具&#xff0c;用于将数据与 DOM 绑定。本文将深入探讨 Vue.js 的两个…

AI游戏革命!谷歌推出GameNGen,实时生成游戏画面,每秒20帧实时模拟

未来&#xff0c; AI会取代传统游戏引擎吗&#xff1f; 谷歌的研究人员发表论文称&#xff0c;他们创建了一个名为GameNGen的AI神经网络&#xff0c;直接用AI生成了整个《Doom》游戏&#xff01; 最令人惊讶的是&#xff0c;他们并没有使用传统的游戏引擎&#xff0c;而是在单…

基于单片机的浴室防雾镜系统设计

1系统方案设计 浴室防雾镜是一种特殊的镜子&#xff0c;在浴室中使用时不会起雾&#xff0c;通过对其需要展开分析&#xff0c;本设计基于51单片机设计的浴室防雾镜的系统架构如图2.1所示&#xff0c;采用了DS18B20温度传感器和人体红外感应红外传感器进行智能控制&#xff0c…

通过住宅代理捕获网站快照:技术解析与未来展望

引言 什么是网站快照&#xff1f;为什么需要网站快照&#xff1f; 网站快照的工作原理是什么&#xff1f; 如何捕获网站快照&#xff1f; 网站快照未来的发展趋势 总结 引言 在当今快速发展的数字时代&#xff0c;网站快照作为一种关键的网页记录技术&#xff0c;扮演着越…

Springboot3整合ELK实现日志可视化

一、环境准备 Elasticsearch、Logstash、Kibana,组合起来可以搭建线上日志系统 ELK中各个服务的作用 Elasticsearch:用于存储收集到的日志信息&#xff1b; Logstash:用于收集日志&#xff0c;SpringBoot应用整合了Logstash以后会把日志发送给Logstash,Logstash再把日志转发…