当前位置: 首页 > news >正文

输入日期求n天后

题目要求:输入一个日期startdate年月日和days天数(>=1),输出自该日期days天后的日期enddate。
要求输出和输出的年份为四位整数,输入时对输入数据的有效性进行检查;同时考虑跨月,跨年和闰年情况,闰年用自定义函数计算,日期用结构体描述。

乍一看很复杂,要输入输出有效性判断,加日期,每个月天数还不一样,还得跨年跨月的,闰年我也忘了咋定义的,不过不慌,都是纸老虎,咱们一步步来,先看看这个闰年咋回事。

我们一般说的是公历闰年,公历闰年是这样规定的:地球绕太阳公转一周叫做一回归年,一回归年场365天5时48分46秒,因此产生了平年和闰年两种规定,平年一年有365天,比回归年短0.22422日,四年共短0.9688日,故每四年增加一日,这一年有366天,就是闰年。但四年增加一日又比四个回归年多0.0312日,400年后就多3.12日,故400年中少设3个闰年,也就是再400年中只设97个闰年,这样公历年的平均长度与回归年就近似了。
由此规定:每400年97闰,不逢百的年份能被4整除的,或者逢百被400整除的,就是闰年,这一年的2月是29天。

逻辑就是被一百整除的还需被四百整除的是闰年,不被一百整除的被4整除是闰年,故闰年判断的代码如下:

int runyear(int years){    if(years%100==0&&years%400==0){cout<<years<<"是闰年"<<endl;return 1;}else if(years%100!=0&&years%4==0){cout<<years<<"是闰年"<<endl;return 1;}    else return 0;}

下个模块就是判断输入有效性,结构体的年份四位数,大于一千小于9999,月份在一和12之间,日期1、3、5、7、8、10、12月最大31,2月结合年份判断,闰年29,平年28,其余最大30,这么一看还挺复杂,结合后续判断需要,我们把这个最大天数月份表先构建出来:

int monthTodays[12]={31,28,31,30,31,30,31,31,30,31,30,31};//月份和每天对照表
if(runyear(startdate.year)) monthTodays[1]=29;//闰年2月29天
int check(struct date){    if(date.year<1000||date.year>9999){cout<<"illgal input!"<<endl;return 0;}else if(date.month<1||date.month>12){cout<<"illgal input!"<<endl;return 0;}//年份和月份判断都简单else if(date.days>0||date.days<monthTodays(data.month)){天数小于月份最大值,借助数组对照方便很多cout<<"illgal input!"<<endl;return 0;}else return 1;
}    

最后就是根据已有日期计算新日期了,这个复杂在情况多,跨月跨年,但是仔细想想操作也很少,天数溢出了就月份加加日期归一呗,无非多一次月份等于12的跨年判断,过一个月就减去剩余天数,代码如下:

struct date caculate(struct startdate,int days,int monthTodays[]){        int rest =days;//剩余天数struct enddate=startdate;while(rest>0){int temp=monthTodays[startdate.month]-startdate.days;//看当月还剩多少天if(rest>temp)//当月天数不足以加完{   if(startdate.month==12)//跨年{enddate.year++;enddate.month=1;enddate.days=1;}else{rest=rest-temp;enddate.month++;enddate.days=1;//更新月份}else{//当月以内就能解决enddate.days=enddate.days+rest;rest=0;}}cout<<enddate.year<<" "<<enddate.month<<" "<<enddate.days<<endl;return enddate;
}    

最后就是主函数了,定义结构体,输入起始日期和days,判断输入有效性,计算新日期,就这一套流程,代码如下:

int main(){int monthTodays[12]={31,28,31,30,31,30,31,31,30,31,30,31};//月份和每天对照表cout<<"输入起始日期";cin>>startdate.year>>startdate.month>>startdate.days;int adddays=0;cout<<"输入新增天数";cin>>adddays;if(check(startdate)){//检查输入合法if(runyear(startdate.year)) monthTodays[1]=29;//闰年2月29天struct enddate=caculate(startdate,adddays,monthTodays)}return 0;
}

写在后面

这套代码其实并不能运行,蹦出十来个错,应该是哪结构不对劲了,但是编译环境简陋,用平板的C++编译器,找错很费劲,就这么着吧;但是逻辑通过写这篇文章的时候又梳理了一遍,应该是没啥问题。

相关文章:

输入日期求n天后

题目要求&#xff1a;输入一个日期startdate年月日和days天数&#xff08;>1&#xff09;&#xff0c;输出自该日期days天后的日期enddate。 要求输出和输出的年份为四位整数&#xff0c;输入时对输入数据的有效性进行检查&#xff1b;同时考虑跨月&#xff0c;跨年和闰年情…...

科技论文中的Assumption、Remark、Property、Lemma、Theorem、Proof含义

一、背景 学控制、数学、自动化专业的学生在阅读论文时&#xff0c;经常会看到Assumption、Remark、Property、Lemma、Theorem、Proof等单词&#xff0c;对于初学者可能不太清楚他们之间的区别&#xff0c;因此这里做一下详细的说明。 以机器人领域的论文为例。 论文题目&…...

逆向爬虫进阶实战:突破反爬虫机制,实现数据抓取

文章目录 一、引言二、逆向爬虫进阶技巧三、逆向爬虫进阶实战代码片段四、总结与展望好书推荐内容简介作者简介前言节选 一、引言 随着网络技术的发展&#xff0c;网站为了保护自己的数据和资源&#xff0c;纷纷采用了各种反爬虫机制。然而&#xff0c;逆向爬虫技术的出现&…...

个体民营诊所-如何打破传统发展瓶颈,增客流-提营收?

随着人们对传统医学和自然疗法的需求增加&#xff0c;开办针灸诊所可以满足社会公众对健康的需求&#xff0c;提供更多元化的医疗选择。 针灸作为一种传统的中医疗法&#xff0c;不仅可以帮助调理身体&#xff0c;还能帮助客户缓解疼痛&#xff0c;改善循环等。但针灸诊所&…...

Filament引擎分析--command抽象设备API

1. 前言 Filament中使用了FrameGraph来管理渲染管线&#xff0c;需要准备两点&#xff1a; 设备接口抽象&#xff1a;设备API抽象为Command资源抽象&#xff1a;使用虚拟资源&#xff0c;在实际用到时再创建&#xff0c;方便剔除无用资源 下面就围绕Filament中设备API抽象为…...

网络协议与响应码

http&#xff1a;超文本&#xff08;不止文本&#xff09;传输协议&#xff0c;底层是tcp/ip get&#xff0c;post&#xff0c;put&#xff0c;delete GET把参数包含在 URL 中&#xff0c; POST 通过 request body 传递参数 请求都是tcp链接&#xff0c;HTTP规定&#xff0c;当…...

彻底删除VsCode配置和安装过的插件与缓存

前言 当你准备对 Visual Studio Code&#xff08;VSCode&#xff09;进行重新安装时&#xff0c;可能遇到一个常见问题&#xff1a;重新安装后&#xff0c;新的安装似乎仍然保留了旧的配置信息&#xff0c;这可能会导致一些麻烦。这种情况通常是由于卸载不彻底所致&#xff0c…...

【XILINX】ISE chipscope出现错误 Can‘t load jre bin client jvm.dll

记录一个ISE软件使用过程中遇到的问题及解决方案。 问题 ISE chipscope出现错误 Cant load jre bin client jvm.dll C:\Xilinx\14.7\ISE_DS\ISE\bin\nt C:\Xilinx\14.7\ISE_DS\.xinstall\bin\nt C:\Xilinx\14.7\ISE_DS\.xinstall\bin\nt64 C:\Xilinx\14.7\ISE_DS\ISE\bin\nt6…...

并发编程(已整理,已废弃)

这一块知识&#xff0c;那真是有的啃了。 直接先看速成基础&#xff0c;再直接吃掉高频考点。 每个小知识点&#xff0c;直接看短视频&#xff0c;浅浅了解&#xff0c;在写下来就是自己的资料。 # 基础 一个进程有多个线程&#xff0c;多个线程共享进程的堆和方法区&#xf…...

第一篇:MongoDB的安装、启动、关闭、链接shell

目录 简介 安装 安装遇到的问题 查看brew 当前使用的源&#xff1a; 更换brew 源。更换成清华大学镜像源 版本查看 MongoDB 数据目录与日志目录 启动方式一&#xff1a; 启动MongoDB 验证MongoDB 是否正常运行 停止或重新启动 停止MongoDB 服务 重新启动MongoDB服…...

Python爬虫之重放攻击详解

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 重放攻击是一种网络攻击方式&#xff0c;攻击者通过截获合法用户的请求&#xff0c;并将其重新发送&#xff0c;以模拟合法用户的行为。在Python爬虫领域&#xff0c;了解重放攻击的原理和防范方法至关重要。本文…...

构建一个语音转文字的WebApi服务

构建一个语音转文字的WebApi服务 简介 由于业务需要&#xff0c;我们需要提供一个语音输入功能&#xff0c;以便更方便用户的使用&#xff0c;所以我们需要提供语音转文本的功能&#xff0c;下面我们将讲解使用Whisper将语音转换文本&#xff0c;并且封装成WebApi提供web服务…...

在开发软件KEIL MDK和IAR开发工程里面打印行号、文件名、函数名、时间

最近应用固件没有时间记录&#xff0c;分别请那个是最新的&#xff08;在没有版本区别的情况下&#xff09;&#xff0c;有个办法记录编译时间即可&#xff0c;记录笔记以便查看 在软件工程里面直接用宏 __FILE __ 当前程序文件名的字符串 __FUNCTION __ 当前函数的名字字符串 …...

springboot(ssm健身器材用品网 健身用品商城Java(codeLW)

springboot(ssm必录德健身器材用品网 健身用品商城Java(code&LW) 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&am…...

idea git合并推送分支

远端代码合并到当前分支 1.本地切换到当前分支 2.远端目标分支右键合并到当前分支(使用合并拉入) 本地当前分支推送合并到远端分支 1.切换到远端本地分支 2.合并本地其他分支(想要推送的分支)到当前分支 3.推送分支 注意:这里的合并是:将XXX合并到XXX中 …...

AntDesignBlazor示例——创建列表页

本示例是AntDesign Blazor的入门示例&#xff0c;在学习的同时分享出来&#xff0c;以供新手参考。 示例代码仓库&#xff1a;https://gitee.com/known/AntDesignDemo 1. 学习目标 使用Table组件创建列表页面使用DisplayName特性显示中文表头使用模板和Tag组件显示高温数据使…...

微信小程序模板选择指南:如何找到靠谱的平台?

随着移动互联网的快速发展&#xff0c;越来越多的企业和商家都在微信小程序上开展业务。而他们也希望可以通过微信小程序模板快速搭建小程序&#xff0c;那么如何才能找到一个靠谱的微信小程序模板平台呢&#xff1f;下面给大家简单讲解一下。 首先要知道的是&#xff0c;微信小…...

es常用查询编辑

查询指定id信息 GET /index_name/_doc/1074266245查询指定信息并降序 GET /index_name/_search {"query": {"term": {"deviceId": {"value": "1074266245"}}}, "sort": [{"timestamp": {"order&qu…...

记录 | linux静态库和动态库的理解

hello.cpp&#xff1a; #include <cstdio>void hello() {printf("Hello, world!\n"); }main.cpp&#xff1a; #include <cstdio>void hello();int main() {hello();return 0; }静态库编译配置&#xff1a; cmake_minimum_required(VERSION 3.12) proj…...

ParBFT: Faster Asynchronous BFT Consensus with a Parallel Optimistic Path

目录 笔记后续的研究方向摘要引言 ParBFT: Faster Asynchronous BFT Consensus with a Parallel Optimistic Path CCS 2023 笔记 后续的研究方向 摘要 为了减少异步拜占庭容错&#xff08;BFT&#xff09;共识的延迟和通信开销&#xff0c;通常会添加一条乐观的路径&#xf…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...