C++求日期差值题目

news2024/10/26 15:20:40

C++日期差值题目(牛客网)题目超链接

仅个人思路不是最优解
在这里插入图片描述

仔细阅读地题目,要求输入连续的两串数字表示两个日期
所以我感觉日期类不太方便(也许是我实力不允许)
cin使用起来就不太方便,我这里选择使用scanf,通过scanf的机制我们取到日期1和日期二的年月日。

int _year1, _year2, _month1, _month2, _day1, _day2;
	int _arr[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	scanf("%4d%2d%2d", &_year1, &_month1, &_day1);
	scanf("%4d%2d%2d", &_year2, &_month2, &_day2);
	int maxy, maxm, maxd, miny, minm, mind;

顺便这里定义一个数组,用来方便取到不同月份的天数。
然后我们为了处理不知道那个日期大,另外我们在定义一个用来存放大小年月日的变量。

int main()
{
	int _year1, _year2, _month1, _month2, _day1, _day2;
	int _arr[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	scanf("%4d%2d%2d", &_year1, &_month1, &_day1);
	scanf("%4d%2d%2d", &_year2, &_month2, &_day2);
	int maxy, maxm, maxd, miny, minm, mind;
	 //因为函数只能有一个返回值,所以我写了两个函数,有更好的方法望交流
	maxy = JuageBig(_year1, _year2); //取大年
	miny = JuageSmall(_year1, _year2);//取小年
	maxm = JuageBig(_month1, _month2);//取大月
	minm = JuageSmall(_month1, _month2);//取小月
	int n = 0;//这个变量在后面就知道了
	int ab = _day1 - _day2;
	int abc = abs(ab);//取绝对值
	if (abc == 1) //最特别的情况如果是相邻的两天我们直接输出2
	{
		cout << 2 << endl;
	}
	else
	{
		//如果不是相邻的两天我们就会进来
		if (_year1 != _year2)
		{
			//先判断年,年不相等我们需要先调整年在往下继续调整
			while (maxy > miny)
			{
				if (maxy == _year1)
				{
					//如果大年是_year1
					_day1 += Juageyear(maxy--);//哪个是大年我们这里就判断一下是不是闰年在--,在转化成天数加在_day里
				}
				else {
					//同理
					_day2 += Juageyear(maxy--);
				}
			}
			while (maxm > minm)
			{
				//如果走到这里说明年已经相等了
				//开始判断月份
				if (maxm == _month1)
				{
					//跟年同理,但是月份这里我们需要取数组里的数据,这里要注意取的是给出月份的上一个月,转化成天数
					_day1 += _arr[--maxm];
				}
				else {
					_day2 += _arr[--maxm];
				}
			}
			//经过重重关卡,我们走到了这里,意味着年和月份都已经一样了
			maxd = JuageBig(_day1, _day2);
			mind = JuageSmall(_day1, _day2);
			while (maxd > mind) {
				//这样成本比较低
				//只要大的天数减一天,n就++
				//这里要注意因为我们这里是>所以最后输出需要加1,不然就会少一天
				maxd--;
				n++;
			}
		}
		else {
		//这里是用来处理第一层判断的,原理是一样的
			while (maxm > minm)
			{
				if (maxm == _month1)
				{
					_day1 += _arr[--maxm];
				}
				else {
					_day2 += _arr[--maxm];
				}
			}
			maxd = JuageBig(_day1, _day2);
			mind = JuageSmall(_day1, _day2);
			while (maxd > mind) {
				maxd--;
				n++;
			}
		}
		cout << n+1 << endl;//最终输出结果
	}
	return 0;
}

这里我们的整体思路就是将年月不同多出来的日期都转化为天数,最终比较天数,在使用计数的方法计算出差值。

#include<iostream>
#include<cmath>
using namespace std;

int Juageyear(int year)
{
	int tyear = year - 1;
	if ((tyear % 4 == 0 && tyear % 100 != 0) || tyear % 400 == 0)
	{
		return 366;
	}
	else {
		return 365;
	}
}

int JuageBig(int a, int b)
{
	if (a > b)
		return a;
	else
		return b;
}
int JuageSmall(int a, int b)
{
	if (a < b)
		return a;
	else
		return b;
}

这是前面的一些简单的比大小和计算润年的代码,比较简单就不做讲解啦!
(作者思路,不是最佳解)谢谢大家!

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

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

相关文章

ubuntu服务器监控程序崩溃自动重启

环境&#xff1a;监控程序运行情况分为两种情况&#xff0c;一种带界面&#xff0c;一种控制台程序&#xff0c;带界面程序采用脚本监控方式&#xff0c;不带界面采用Supervisor工具监控。 1. 自动重启带界面程序&#xff1a; #!/bin/sh while true; do processExistps aux | …

Android 未来可能支持 Linux 应用,Linux 终端可能登陆 Android 平台

近日&#xff0c;根据 android authority 的消息&#xff0c;Google 正在开发适用于 Android 的 Linux 终端应用&#xff0c;而终端应用可以通过开发人员选项启用&#xff0c;并将 Debian 安装在虚拟机中。 在几周前&#xff0c;Google 的工程师开始为 Android 开发新的 Termi…

2021年新版Go工程师大厂面试题Go面试题容器技术

Go面试题--容器技术 1、为什么需要 DevOps 在当今&#xff0c;软件开发公司在软件新版本发布方面&#xff0c;多尝试通过发布一系列以小的 特性改变集为目标的新软件版本&#xff0c;代替发布一个大特性改变集的新软件版本的 方式。这种方式有许多优点&#xff0c;诸如&#x…

分布式数据库的进度管理:TiDB 备份恢复工具 PiTR 的原理与实践

导读 对于一款企业级数据库产品而言&#xff0c;数据的安全性和可恢复性是至关重要的。PiTR&#xff08;Point in Time Restore&#xff09;作为 TiDB 备份工具的核心功能之一&#xff0c;提供了一种精细的数据恢复能力&#xff0c;允许用户将数据库集群恢复到过去的任意时间点…

通过多元蒙特卡罗模拟来预测股票价格的日内波动性

作者&#xff1a;老余捞鱼 原创不易&#xff0c;转载请标明出处及原作者。 写在前面的话&#xff1a; 日内价格波动对交易策略的重要性不言而喻&#xff0c;尤其是美跨式交易策略&#xff08;The American straddle&#xff09;。由于无法预测所有影响股价的因素&#x…

【原创】java+springboot+mysql法律咨询网系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

loadlocale.c:130: _nl_intern_locale_data: failed已放弃 (核心已转储)]问题

在进行交叉编译cortex-a9架构时&#xff0c;出现以上错误。 问题描述&#xff1a; 在使用 arm-none-linux-gnueabi-gdb 进行 Cortex-A9 架构交叉编译调试时&#xff0c;出现如下错误&#xff1a; arm-none-linux-gnueabi-gdb: loadlocale.c:130: _nl_intern_locale_data: As…

新型物联网电力数据采集器 智能网关通讯协议有哪些?

随着智能化技术的快速发展&#xff0c;电气监测与管理在各个域的应用愈发重要&#xff0c;在物联网&#xff08;IoT&#xff09;应用的发展中&#xff0c;网关扮演着至关重要的角色。它作为连接设备与云平台或数据中心的桥梁&#xff0c;负责数据的收集、处理和传输。网关不仅支…

鸿蒙开发之ArkUI 界面篇 三十四 容器组件Tabs二 常用属性

barPosition&#xff1a;位置开头或结尾,vertical 水平或者垂直,scrollable手势滑动切换,animationDuration 滑动动画时间。BarPosition.Start 效果如下图&#xff1a; BarPosition.End 效果如下图&#xff1a; 如果显示在左边&#xff0c;使用的是vertical属性,下图&#xff0…

Chrome(谷歌)浏览器 数据JSON格式美化 2024显示插件安装和使用

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 没有美化的格式浏览器展示 美化之后效果图 安装流程 下载地址 https://github.com/gildas-lormeau/JSONVue 点击下载 下载成功&#xff0c;如图所示 解压文件 添加成功&#xff0c;如图所示 通过浏览器…

密码学算法概览大全

区块链密码学 目录 对称密码算法 1. 流密码2. 分组密码3. 对称密码算法小结4. 对称密码算法在区块链中的应用 非对称密码算法 1. RSA2. ECC3. 非对称密码算法小结4. 非对称密码算法在区块链中的应用 Hash函数 1. SHA2. RipeMD-1603. Hash函数在区块链中的应用 PKI 1. PKI组成2…

STM32——USART原理及应用

1.什么是USART&#xff1f; 1.1 基本概念 USART英文全称&#xff1a;universal asynchronous receiver and transmitter &#xff0c;翻译过来就是&#xff1a;通用同步异步收/发器。USART是STM32内部集成的硬件外设&#xff0c;可根据数据寄存器的一个字节数据自动生成数据帧…

Python | Leetcode Python题解之第476题数字的补数

题目&#xff1a; 题解&#xff1a; class Solution:def findComplement(self, num: int) -> int:highbit 0for i in range(1, 30 1):if num > (1 << i):highbit ielse:breakmask (1 << (highbit 1)) - 1return num ^ mask

NVIDIA Bluefield DPU上的启动流程4个阶段分别是什么?作用是什么?

文章目录 Bluefield上的硬件介绍启动流程启动流程:eMMC中的两个存储分区:ATF介绍ATF启动的四个阶段:四个主要步骤:各个阶段依赖的启动文件一次烧录fw失败后的信息看启动流程综述Bluefield上的硬件介绍 本文以Bluefield2为例,可以看到RSHIM实际上是Boot相关的集合。也能看…

QT 连接SQL SEVER 之后无法读取浮点和整型

1、ODBC Driver 的版本要对应上。 if (!strDbDirPath.isEmpty())m_strDbDirPath strDbDirPath;m_strDatabaseName strDatabaseName;if (m_database.isOpen() || m_bConnected){qDebug() << QString("QODBC:已经连接成功&#xff01;") << "\n&quo…

八、Linux之实用指令

1、指定运行级别 1.1 基本介绍 运行级别说明 0 &#xff1a;关机 1 &#xff1a;单用户【找回丢失密码】 2&#xff1a;多用户状态没有网络服务&#xff08;用的非常少&#xff09; 3&#xff1a;多用户状态有网络服务&#xff08;用的最多&#xff09; 4&#xff1a;系统未使…

《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署mongodb 7.0.14容器版分片集群》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&…

【自动驾驶汽车通讯协议】GMSL通信技术以及加串器(Serializer)解串器(Deserializer)介绍

文章目录 0. 前言1. GMSL技术概述2. 为什么需要SerDes&#xff1f;3. GMSL技术特点4.自动驾驶汽车中的应用5. 结论 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解及成果&#xff0c;但是内容可能存在不准…

图解 微信开发者工具 小程序源码 调试、断点标记方法 , 微信小程序调试器,真机调试断点调试方法,小程序网络API请求调试方法 总结

在我们使用微信开发者工具进行微信小程序开发的时候&#xff0c;在这个微信开发者工具的代码编辑框里面我们是无法像使用vscode, idea等IDE工具时那样直接对代码打断点进行调试&#xff0c; 原因是小程序实际上他就是一个web浏览器应用的包装, 在其内部使用的还是类似chrome的…

mac 桌面版docker no space left on device

报错信息 docker pull镜像时报&#xff1a; failed to register layer: Error processing tar file(exit status 1): write /home/admin/oceanbase_bak/bin/observer: no space left on device 解决 增加 docker 虚拟磁盘大小。 调整完点击重启即可。