输入日期求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天后
题目要求:输入一个日期startdate年月日和days天数(>1),输出自该日期days天后的日期enddate。 要求输出和输出的年份为四位整数,输入时对输入数据的有效性进行检查;同时考虑跨月,跨年和闰年情…...
科技论文中的Assumption、Remark、Property、Lemma、Theorem、Proof含义
一、背景 学控制、数学、自动化专业的学生在阅读论文时,经常会看到Assumption、Remark、Property、Lemma、Theorem、Proof等单词,对于初学者可能不太清楚他们之间的区别,因此这里做一下详细的说明。 以机器人领域的论文为例。 论文题目&…...
逆向爬虫进阶实战:突破反爬虫机制,实现数据抓取
文章目录 一、引言二、逆向爬虫进阶技巧三、逆向爬虫进阶实战代码片段四、总结与展望好书推荐内容简介作者简介前言节选 一、引言 随着网络技术的发展,网站为了保护自己的数据和资源,纷纷采用了各种反爬虫机制。然而,逆向爬虫技术的出现&…...
个体民营诊所-如何打破传统发展瓶颈,增客流-提营收?
随着人们对传统医学和自然疗法的需求增加,开办针灸诊所可以满足社会公众对健康的需求,提供更多元化的医疗选择。 针灸作为一种传统的中医疗法,不仅可以帮助调理身体,还能帮助客户缓解疼痛,改善循环等。但针灸诊所&…...
Filament引擎分析--command抽象设备API
1. 前言 Filament中使用了FrameGraph来管理渲染管线,需要准备两点: 设备接口抽象:设备API抽象为Command资源抽象:使用虚拟资源,在实际用到时再创建,方便剔除无用资源 下面就围绕Filament中设备API抽象为…...
网络协议与响应码
http:超文本(不止文本)传输协议,底层是tcp/ip get,post,put,delete GET把参数包含在 URL 中, POST 通过 request body 传递参数 请求都是tcp链接,HTTP规定,当…...
彻底删除VsCode配置和安装过的插件与缓存
前言 当你准备对 Visual Studio Code(VSCode)进行重新安装时,可能遇到一个常见问题:重新安装后,新的安装似乎仍然保留了旧的配置信息,这可能会导致一些麻烦。这种情况通常是由于卸载不彻底所致,…...
【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…...
并发编程(已整理,已废弃)
这一块知识,那真是有的啃了。 直接先看速成基础,再直接吃掉高频考点。 每个小知识点,直接看短视频,浅浅了解,在写下来就是自己的资料。 # 基础 一个进程有多个线程,多个线程共享进程的堆和方法区…...
第一篇:MongoDB的安装、启动、关闭、链接shell
目录 简介 安装 安装遇到的问题 查看brew 当前使用的源: 更换brew 源。更换成清华大学镜像源 版本查看 MongoDB 数据目录与日志目录 启动方式一: 启动MongoDB 验证MongoDB 是否正常运行 停止或重新启动 停止MongoDB 服务 重新启动MongoDB服…...
Python爬虫之重放攻击详解
更多资料获取 📚 个人网站:ipengtao.com 重放攻击是一种网络攻击方式,攻击者通过截获合法用户的请求,并将其重新发送,以模拟合法用户的行为。在Python爬虫领域,了解重放攻击的原理和防范方法至关重要。本文…...
构建一个语音转文字的WebApi服务
构建一个语音转文字的WebApi服务 简介 由于业务需要,我们需要提供一个语音输入功能,以便更方便用户的使用,所以我们需要提供语音转文本的功能,下面我们将讲解使用Whisper将语音转换文本,并且封装成WebApi提供web服务…...
在开发软件KEIL MDK和IAR开发工程里面打印行号、文件名、函数名、时间
最近应用固件没有时间记录,分别请那个是最新的(在没有版本区别的情况下),有个办法记录编译时间即可,记录笔记以便查看 在软件工程里面直接用宏 __FILE __ 当前程序文件名的字符串 __FUNCTION __ 当前函数的名字字符串 …...
springboot(ssm健身器材用品网 健身用品商城Java(codeLW)
springboot(ssm必录德健身器材用品网 健身用品商城Java(code&LW) 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0&am…...
idea git合并推送分支
远端代码合并到当前分支 1.本地切换到当前分支 2.远端目标分支右键合并到当前分支(使用合并拉入) 本地当前分支推送合并到远端分支 1.切换到远端本地分支 2.合并本地其他分支(想要推送的分支)到当前分支 3.推送分支 注意:这里的合并是:将XXX合并到XXX中 …...
AntDesignBlazor示例——创建列表页
本示例是AntDesign Blazor的入门示例,在学习的同时分享出来,以供新手参考。 示例代码仓库:https://gitee.com/known/AntDesignDemo 1. 学习目标 使用Table组件创建列表页面使用DisplayName特性显示中文表头使用模板和Tag组件显示高温数据使…...
微信小程序模板选择指南:如何找到靠谱的平台?
随着移动互联网的快速发展,越来越多的企业和商家都在微信小程序上开展业务。而他们也希望可以通过微信小程序模板快速搭建小程序,那么如何才能找到一个靠谱的微信小程序模板平台呢?下面给大家简单讲解一下。 首先要知道的是,微信小…...
es常用查询编辑
查询指定id信息 GET /index_name/_doc/1074266245查询指定信息并降序 GET /index_name/_search {"query": {"term": {"deviceId": {"value": "1074266245"}}}, "sort": [{"timestamp": {"order&qu…...
记录 | linux静态库和动态库的理解
hello.cpp: #include <cstdio>void hello() {printf("Hello, world!\n"); }main.cpp: #include <cstdio>void hello();int main() {hello();return 0; }静态库编译配置: 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 笔记 后续的研究方向 摘要 为了减少异步拜占庭容错(BFT)共识的延迟和通信开销,通常会添加一条乐观的路径…...
生物信息学逆向解析mRNA疫苗序列:从公开数据组装BNT-162b2与mRNA-1273的基因蓝图
1. 项目概述与背景解析 最近在生物信息学和疫苗研究领域,一个名为“NAalytics/Assemblies-of-putative-SARS-CoV2-spike-encoding-mRNA-sequences-for-vaccines-BNT-162b2-and-mRNA-1273”的项目引起了我的注意。这个项目标题看起来很长,但核心非常明确&…...
3分钟完成30分钟任务:词达人自动化助手终极指南
3分钟完成30分钟任务:词达人自动化助手终极指南 【免费下载链接】cdr 微信词达人,高正确率,高效简洁。支持班级任务及自选任务 项目地址: https://gitcode.com/gh_mirrors/cd/cdr 你是否厌倦了每周在词达人平台上花费数小时完成枯燥的…...
罗技PUBG鼠标宏终极教程:告别压枪烦恼,轻松提升射击稳定性
罗技PUBG鼠标宏终极教程:告别压枪烦恼,轻松提升射击稳定性 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为《绝地求…...
从0到1:手把手教你搭建VSCode(附避坑指南,拒绝报错),全程复制粘贴即可
🔥个人主页:北极的代码(欢迎来访) 🎬作者简介:java后端学习者 ❄️个人专栏:苍穹外卖日记,SSM框架深入,JavaWeb ✨命运的结局尽可永在,不屈的挑战却不可须臾或…...
树莓派机械爪项目实战:从硬件连接到Python控制全解析
1. 项目概述:当树莓派遇上机械爪最近在折腾一个挺有意思的小项目,叫Demwunz/openclaw-pi-installation。光看这个名字,就能猜到个大概:这是一个为树莓派(Raspberry Pi)准备的机械爪(Claw&#x…...
Pandrator:基于Python的自动化内容生成与数据转换工具实践
1. 项目概述与核心价值最近在折腾一些自动化数据处理和内容生成的工作流,发现了一个挺有意思的开源项目,叫Pandrator。乍一看这个名字,可能会联想到“潘多拉”和“生成器”的结合,实际上它也确实是一个功能强大的内容转换与生成工…...
AI绘图技能解析:用自然语言驱动Excalidraw自动生成图表
1. 项目概述:一个为Excalidraw注入AI灵魂的绘图技能如果你经常用Excalidraw画流程图、架构图或者白板草图,那你一定体会过那种“想法很丰满,画笔很骨感”的尴尬。脑子里明明有一个清晰的系统架构,但落到画布上,光是调整…...
MySQL-MVCC核心原理-版本链ReadView与可见性判断
MVCC 全称是 Multi-Version Concurrency Control,也就是多版本并发控制。它的核心思想是:为同一行数据维护多个版本,让读写在很多情况下不用互相阻塞。 没有 MVCC 时,读写冲突通常要大量依赖锁。MVCC 让普通 select 可以读一个可见…...
ARM Cortex-A520集群架构与缓存优化配置指南
1. ARM Cortex-A520集群架构概述ARM Cortex-A520作为新一代高效能处理器核心,其集群配置能力直接影响着嵌入式系统和移动设备的整体性能表现。A520集群采用多核共享缓存架构,支持从单核到多核的灵活扩展,为开发者提供了丰富的参数配置空间。在…...
Node.js后端框架Hereetria:平衡灵活性与约定,构建现代化Web应用
1. 项目概述与核心价值 最近在折腾一个挺有意思的开源项目,叫“Hereetria”。这个名字听起来有点陌生,但如果你对构建现代化的、可扩展的Web应用后端架构感兴趣,那它绝对值得你花时间研究一下。简单来说,Hereetria是一个基于Node.…...
