C++求日期差值题目

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;
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spark的安装配置及集群搭建

Spark的本地安装配置&#xff1a; 我们用scala语言编写和操作spark&#xff0c;所以先要完成scala的环境配置 1、先完成Scala的环境搭建 下载Scala插件&#xff0c;创建一个Maven项目&#xff0c;导入Scala依赖和插件 scala依赖 <dependency><groupId>org.scal…

【途牛旅游网-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

Java多线程--实现跑马小游戏

线程的实现方式 继承Thread类&#xff1a;void run()方法没有返回值&#xff0c;无法抛异常实现Runnable接口&#xff1a;void run()方法没有返回值&#xff0c;无法抛异常实现Callable接口&#xff1a;V call() throws Exception 返回结果&#xff0c;能够抛异常 实现Callab…

《Windows PE》6.4.2 远程注入DLL

实验四十七&#xff1a;远程注入DLL 写一个窗口程序&#xff0c;将一个dll通过远程注入的方法&#xff0c;注入到第三章的示例程序PEHeader.exe中&#xff0c;支持32位和64位PE。 ●dll.c /*------------------------------------------------------------------------FileNam…

【实战案例】JSR303统一校验与SpringBoot项目的整合

前后端分离项目中&#xff0c;当前前端请求后端接口的时候通常需要传输参数&#xff0c;对于参数的校验应该在哪一步进行校验&#xff1f;Controller中还是Service中&#xff1f;答案是都需要校验&#xff0c;只不过负责的板块不一样&#xff0c;Controller中通常校验请求参数的…

OpenCV高级图形用户界面(6)获取指定窗口中图像的矩形区域函数getWindowImageRect()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 提供窗口中图像的矩形区域。 该函数 getWindowImageRect 返回图像渲染区域的客户端屏幕坐标、宽度和高度。 函数原型 Rect cv::getWindowImage…

上海亚商投顾:沪指失守3200点 房地产板块集体下挫

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天冲高回落&#xff0c;沪指尾盘跌超1%&#xff0c;失守3200点关口。网络安全概念开盘大涨&#xff0c;…

Kaggle竞赛的流程 —— 手把手讲述如何完成一次kaggle比赛

Kaggle竞赛的工作流程&#xff1a; 1、加入竞赛&#xff1a; 看一下竞赛的描述&#xff0c;了解具体任务和数据集的情况之后&#xff0c;如果比较感兴趣这个比赛。点击Join Competition按钮&#xff0c;接受竞赛规则后&#xff0c;就可以访问比赛数据集啦。如下图所示&#xf…

08_实现 reactive

目录 编写 reactive 的函数签名处理对象的其他行为拦截 in 操作符拦截 for...in 循环delete 操作符 处理边界新旧值发生变化时才触发依赖的情况处理从原型上继承属性的情况处理一个对象已经是代理对象的情况处理一个原始对象已经被代理过一次之后的情况 浅响应与深响应代理数组…

Leetcode 跳跃游戏 二

核心任务是找出从数组的起点跳到终点所需的最小跳跃次数。 这段代码解决的是“跳跃游戏 II”&#xff08;Leetcode第45题&#xff09;&#xff0c;其核心任务是找出从数组的起点跳到终点所需的最小跳跃次数。 class Solution {public int jump(int[] nums) {//首先处理特殊情…

LabVIEW提高开发效率技巧----时序分析

一、什么是时序分析&#xff1f; 时序分析是优化LabVIEW程序性能的重要步骤。它通过分析程序各个部分的执行时间&#xff0c;帮助开发者找到程序运行中的瓶颈&#xff0c;并进行有针对性的优化。在LabVIEW中&#xff0c;Profile Performance and Memory工具是进行时序分析的关…

MySQL 免密登录的几种配置方式

文章目录 MySQL 免密登录的几种配置方式使用操作系统用户实现免密登录具体步骤&#xff1a;Step 1: 修改 MySQL 配置文件Step 2: 重启 MySQL 服务Step 3: 使用系统用户登录 MySQL优点&#xff1a;缺点&#xff1a; 使用 mysql_config_editor 配置免密文件具体步骤&#xff1a;S…

晶体与晶振的区别

概述 晶振是有源晶振的简称&#xff0c;又叫振荡器。英文名称是oscillator。 晶体则是无源晶振的简称&#xff0c;也叫谐振器。英文名称是crystal&#xff0c;电路上简称为XTAL。 无源晶振&#xff08;晶体&#xff09;&#xff1a;需要借助时钟电路才能产生振荡信号。 有源…

基于SpringBoot网上超市的设计与实现(论文+源码)_kaic

摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此超市商品销售信…

Oracle DECODE 丢失时间精度的原因与解决方案

在Oracle数据库中&#xff0c;DECODE 函数是一个非常实用的条件处理函数&#xff0c;通常用于替代简单的 CASE WHEN 语句。它根据给定的值列表进行匹配&#xff0c;如果匹配成功则返回相应的值。如果不匹配&#xff0c;返回一个默认值。 问题描述 SELECT DECODE(-21, -1, NU…

Python酷库之旅-第三方库Pandas(157)

目录 一、用法精讲 716、pandas.Timedelta.view方法 716-1、语法 716-2、参数 716-3、功能 716-4、返回值 716-5、说明 716-6、用法 716-6-1、数据准备 716-6-2、代码示例 716-6-3、结果输出 717、pandas.Timedelta.as_unit方法 717-1、语法 717-2、参数 717-3、…

MyBatis 框架搭建时依赖包引入异常

MyBatis 框架搭建时依赖包引入异常 问题&#xff1a;原因&#xff1a;解决办法&#xff1a; 问题&#xff1a; 在基于idea环境中学习搭建mybatis框架时&#xff0c;在maven工程的pom.xml文件中引入的 junit及mysql依赖包后&#xff0c;出现驼色阴影&#xff0c;提示信息如下图&…

白平衡之基于 Green 通道的白平衡算法

免责声明&#xff1a;本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下&#xff0c;作者不对因使用本文内容而导致的任何直接或间接损失承担责任&#xff0c;包括但不限于数据丢失、业务中断或其他经济…

IP报文格式、IPv6概述

IPv4报文格式 IPv4报文首部长度至少为20字节(没有可选字段和填充的情况下)&#xff0c;下面来逐一介绍首部各个字段的含义 Version版本&#xff1a;表示采用哪一种具体的IP协议&#xff0c;对于IPv4来说该字段就填充4以表示&#xff0c;如果是IPv6就填充6IHL首部长度&#xff…

HTML5实现古典音乐网站源码模板2

文章目录 1.设计来源1.1 主界面1.2 古典音乐界面1.3 著名人物界面1.4 古典乐器界面1.5 历史起源界面1.6 联系我们界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&a…