【C++练习】日期常见题型训练(5道编程题)

【C++练习】日期题型训练

  • ①.日期累加
  • ②.日期差值
  • ③.打印日期
  • ④.求1+2+3+...+n(非正常方法)
  • ⑤.计算一年的第几天

①.日期累加

在这里插入图片描述

解题思路:
1. 日期相加相减都要考虑2月的天数情况。
2.写一个可以获取每个月份天数的函数(要讨论闰年情况)。
3.当日期相加超过本月的最大天数时,就需要将月份加一,而天数需要减去当月的天数,当天数还大于当前月份天数,循环上面的操作。当天数小于当前月份天数,循环停止,而最终的day就是剩下的天数。
4.当月份超过12时,就需要将年份加一,而月份需要重新置为1。

#include <iostream>
#include <iterator>
using namespace std;
int GetMonday(int year, int month)
{int monday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)){return 29;}else{return monday[month];}
}
int main()
{int n;cin>>n;for(int i=0;i<n;i++){int year,month,day,day1;cin>>year>>month>>day>>day1;int total =day+day1;while(total>GetMonday(year,month)){total-=GetMonday( year,  month);month++;if(month==13){year++;month=1;}}day=total;printf("%4d-%02d-%02d\n",year,month,day);}
}

②.日期差值

在这里插入图片描述

解题思路:
1.两个日期相减就是事日期的差值。
2.如何计算差值?从较小的日期不断的叠加,每叠加一次就计数一次,当叠加到较大的日期时,那么计数器上的数值就是差值。
3.需要考虑到闰年2月的情况。
3.需要将一串日期给分割出来。year是前4位。month是56位,day是78位。利用/%来分离。
4.确保是小的日期叠加到大的日期。

#include <iostream>
using namespace std;int GetMonday(int year, int month)
{int monday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)){return 29;}else{return monday[month];}
}
int main()
{int time1, y1, m1, d1;int time2, y2, m2, d2;int n = 1;//计数器while ((cin >> time1 >> time2)){if (time1 > time2)//确保time1是小的日期,time2是大的日期,从time1叠加到time2{int temp = time1;time1 = time2;time2 = temp;}y1 = time1 / 10000;m1 = time1 % 10000 / 100;d1 = time1 % 100;y2 = time2 / 10000;m2 = time2 % 10000 / 100;d2 = time2 % 100;while ((y1 < y2) || (m1 < m2) || (d1 < d2))//当满足其中一个条件就说明time1还是小于time2还需要叠加{d1++;//日期进行叠加if (d1 > GetMonday(y1, m1))//到day叠加到大于本月的最大天数时,就需要将月份进一。而天数需要重新置为1,重新叠加。{m1++;d1=1;}if (m1 == 13)//如果月份超过12,则年份需要进一,月份重新置为1{y1++;m1 = 1;}n++;//每叠加一次,计数器需要计数一次。}cout << n << endl;}}

③.打印日期

在这里插入图片描述

解题思路:
1.就是将天数转化为对应的月份。
2.要考虑闰年2月。
3.月份默认为1月,当天数大于1月天数时,月份加1,将天数减去1月天数。当剩下的天数大于2月天数时,月份再加1,将天数减去2月天数……循环上面的操作,直到天数小于月份的天数时,再终止循环。最终的月份和天数就出来了。

#include <iostream>
using namespace std;
int GetMonday(int year, int month)
{int monday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)){return 29;}else{return monday[month];}
}
int main()
{int year,m;int month=1;int day=0;while(cin>>year>>m){for(int i=1;i<=12;i++){if(m>GetMonday(year,i)){month++;m-=GetMonday( year,i);}else {break;}}day=m;printf("%4d-%02d-%02d",year,month,day);}
}

④.求1+2+3+…+n(非正常方法)

在这里插入图片描述

解题思路:
1.不能使用正常的方法来计算。
2.利用构造函数特性。每生成一个对象,就会自动调用构造。
3.创建n个对象,调用n次构造,在构造函数里面进行数值的叠加。
4.要注意当构造函数结束该数值还存在,需要使用静态成员变量。
5.静态成员变量要在类里声明,类外定义。
6.如何获取类里的数据?利用静态成员函数就可以不需要this指针,也可以调用。

class sum{
public:sum()//利用构造函数特性,在构造函数里面进行数值叠加{_ret+=_i;++_i;}static int GetRet()//最终利用静态成员函数,使结果被外部获取。{return _ret;}
private://静态成员  类里声明static int _i;static int _ret;
};
int sum::_i=1;//类外定义
int sum::_ret=0;
class Solution {
public:int Sum_Solution(int n) {sum a[n];//调用n次构造函数。return sum::GetRet();//调用类里的成员函数需要this指针,单类里的静态成员函数不需要可以直接调用,但需要指明类域。}
};

⑤.计算一年的第几天

在这里插入图片描述

解题思路:
1.通过枚举出每个月的天数,然后将其相加即可。
2.需要考虑闰年2月的天数。
3.当月份等于一月时,直接返回当前的天数即可。
4.当月份大于1月时,就从1月开始累计到该月。

#include <iostream>
using namespace std;int GetMonday(int year, int month){int monday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)){return 29;}else{return monday[month];}}int Day(int year,int month,int day){int i = 0;int ret = 0;for (i = 1; i < month; i++){ret += GetMonday(year, i);}if (month == 1){return  day;}return ret + day;}int main()
{int year,month,day;cin>>year>>month>>day;cout<<Day(year,month,day)<<endl;}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于类的成员顺序

1.本类的成员顺序. public class Fu {// 1.静态 // 方法static {System.out.println(" 静态方法来喽");}public static int x orderPrint(1);{System.out.println("构造代码块来喽");}public static int y orderPrint(2);static {System.out.println(&q…

中间件-netty(1)

netty 前言篇 文章目录 一、IO基础篇1.概念1.1 阻塞(Block)和非阻塞(Non-Block)1.2 同步(Synchronization)和异步(Asynchronous)1.3 BIO 与 NIO 对比1.3.1 面向流与面向缓冲1.3.2 阻塞与非阻塞1.3.3 选择器的问世 2.NIO 和 BIO 如何影响应用程序的设计2.1 API调用2.2 数据处理2…

爬虫正常用哪种代理比较好?

在进行网络爬虫时&#xff0c;使用代理可以带来许多好处&#xff0c;包括提高请求的可靠性、防止IP封锁、实现匿名浏览等。以下是一些常见的代理类型&#xff0c;你可以根据需要选择最适合的&#xff1a; 免费代理&#xff1a;免费代理可能数量众多&#xff0c;但质量和稳定性参…

微信小程序 u-picker 三级联动 uView

微信小程序 u-picker 三级联动 uView 场景 移动端微信小程序框架 uView 中的 u-picker 实现三级联动 数据是一级一级加载的 [12,1201,120101] 多列联动 先了解属性参数 mode可以设置为&#xff1a;time、region、selector、multiSelector&#xff0c;区分时间、地区、单列&am…

【计算机网络详解】——网络层(学习笔记)

&#x1f4d6; 前言&#xff1a;网络层它承担着网络间的数据传输和路由选择等核心任务&#xff0c;通过在传输层协议的基础上添加了路由和转发等功能&#xff0c;使得数据能够在全球范围内的互联网中自由流动。在这篇博客中&#xff0c;我们将深入探讨网络层的工作原理和具体实…

Stable-Diffusion-webui mac m1安装

Stable-Diffusion-webui mac m1安装 推荐下载器&#xff1a;neat download manager 安装git python 3.10 下载地址&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webui 我这边是通过pycharm 通过git直接拉取到本地的&#xff0c;下载的&#xff0c;最好先建…

Spring Boot 中的 STOMP 是什么,原理,如何使用

Spring Boot 中的 STOMP 是什么&#xff0c;原理&#xff0c;如何使用 介绍 在 Spring Boot 中&#xff0c;STOMP 是一种简单的文本协议&#xff0c;用于在客户端和服务器之间进行实时消息传递。它是 WebSocket 协议的一种扩展&#xff0c;可以在 WebSocket 上运行。在本文中…

基于大数据技术对基金分析-python

提示&#xff1a;本文为个人原创&#xff0c;仅供技术探讨与交流&#xff0c;对实际投资并不造成建议。 基于大数据技术对基金分析-python 前言一、数据获取&#xff1a;python爬虫1).从天天基金数据接口获取数据2).爬虫前期准备3).爬虫具体实现 二、数据清洗及计算指标1.过滤数…

Bayes贝叶斯定理

问题的关键在于&#xff1a;人们是否考虑过大背景/先验/问题的前提&#xff0c;从而做出一个大致的估计。这就引出了我们关于理性的探讨&#xff0c;理性不是说知道事实&#xff0c;而是认识到哪些因素是有关的。 x.1 一个关于贝叶斯定理的例子 引入一个steve假设。我们已知大…

实战:求年月日时间前后遇到的坑和解决方式

这里写目录标题 前言正确实例&#xff1a;错误实例&#xff1a; 需求 前言 这周接到一个时间转换任务需要处理&#xff0c;本来没什么问题&#xff0c;后来完成后发现时间有偏差&#xff0c;又重写了一遍代码&#xff0c;感觉很有记录必要性&#xff0c;希望看过的小伙伴可以避…

【TCP/IP】广播 - 定义、原理及编程实现

目录 广播 广播的原理及形式 广播的编程与实现 套接字选项设置 发送者 接收者 拓展资料 广播 广播(Broadcast)是指封包在计算机网络中传输时&#xff0c;目的地址为网络中所有设备的一种传输方式。这里所说的“所有设备”也被限定在一个范围之中&#xff0c;这个范围被称…

Python读写xml(xml,lxml)Edge 浏览器插件 WebTab - 免费ChatGPT

Python读写xml&#xff08;xml&#xff0c;lxml&#xff09;Edge 浏览器插件 WebTab - 免费ChatGPT XML一、xml文件创建方法一&#xff1a;使用xml.dom.minidom1、文件、标签的创建 方法二&#xff1a;使用ElementTree 二、xml文件修改1、修改标签内容&#xff0c;属性2、增加子…