当前位置:网站首页>每日一练:关于日期的一系列
每日一练:关于日期的一系列
2022-07-05 17:17:00 【利刃Cc】
计算日期到天数转换

链接: 计算日期到天数转换
思路1:常规的思路是用while循环从这个月的一号循环到该天,但是其实还有很简单的思路,也就是下面的思路二,还有主要讲的也是思路二。
思路二:用一个数组存放每个月累加起来的天数,如第一个月是31天,第二个月是存放31+28=59天,以此类推,这样子存放是有好处的。
我们求这年到某一天的总天数就是这个月的前一个月,以及这个月以前所有天数累加起来的天数和加上该月的天数!但是别忘了判断这一年是否为闰年以及这一天是否超过了二月(因为还没过二月的话没必要加一天)
代码:
#include<iostream>
using namespace std;
int main()
{
int arr[13] = {
0,31,59,90,120,151,181,212,243,273,304,334,365};
int year, month, day;
cin >> year >> month >> day;
//让n赋值上从这年到这个月的上个月的总天数再加上现在的天数day
int n = arr[month - 1] + day;
//记得判断是否为闰年
if(month > 2 && (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)))
n++;
cout << n;
return 0;
}
日期累加

链接: 日期累加
思路:因为这道题要求m个测试用例,所以要循环m遍。并用nowday记录当月最大天数,便于后面的判断。
然后用while子循环,将addday的天数累加到day和month上,然后addday–。
每次循环都判断一下当天是不是超过当月最大天数,以及该月是不是超过了12月。
代码:
#include<iostream>
using namespace std;
int main()
{
int arr[13] = {
0,31,28,31,30,31,30,31,31,30,31,30,31};
int m = 0;
cin >> m;
int year = 0, month = 1, day = 1, addday = 0;
//因为有多组测试用例,所以用m来循环
for(int i=0; i<m; i++)
{
cin >> year >> month >> day >> addday;
int nowday = arr[month];//用nowday记录当月最大天数
while(addday > 0)
{
day++;
if((month == 2) && ((year%4==0 && year%100!=0) || (year%400==0)))
{
nowday=29;
}
//判断天数是否大于当月最大天数
if(day > nowday)
{
day = 1;
month++;
//判断月数是否大于12
if(month > 12)
{
month=1;
year++;
}
nowday=arr[month];
}
addday--;
}
//把天和月按格式打印
if(day<10 && month<10)
cout<<year<<"-0"<<month<<"-0"<<day<<endl;
else if(day<10 && month>=10)
cout<<year<<'-'<<month<<"-0"<<day<<endl;
else if(day>=10 && month<10)
cout<<year<<"-0"<<month<<'-'<<day<<endl;
else
cout<<year<<'-'<<month<<'-'<<day<<endl;
}
return 0;
}
打印日期

链接: 打印日期
思路:先用sday存放一下总天数,然后将sday判断这年是不是闰年,然后用while循环将sday拆成day和month,每次day++,sday–,直到sday等于0。
然后记得判断day是不是达到了该月的最大天数,是的话重置一下,还要判断一下月是不是大于12,是的话也要重置一下。
代码:
#include<iostream>
using namespace std;
int main()
{
int arr[13]={
0,31,28,31,30,31,30,31,31,30,31,30,31};
int year=0,month=1,day=0,sday=0;
cin>>year>>sday;
//判断一下是不是闰年
if((year % 4 ==0 && year % 100 != 0) || (year % 400 == 0))
arr[2]=29;
//将总天数转化成月和天
while(sday > 0)
{
day++;
if(day > arr[month])
{
day=1;
month++;
if(month > 12)
{
month=1;
year++;
}
}
sday--;
}
//判断一下天数和月打印的格式
if(day<10 && month<10)
cout<<year<<"-0"<<month<<"-0"<<day<<endl;
else if(day<10 && month>=10)
cout<<year<<'-'<<month<<"-0"<<day<<endl;
else if(day>=10 && month<10)
cout<<year<<"-0"<<month<<'-'<<day<<endl;
else
cout<<year<<'-'<<month<<'-'<<day<<endl;
//因为有多组测试用例,所有要重置
arr[2]=28;
month=day=1;
return 0;
}
日期差值

链接: 日期差值
思路:先把两个数的年月日分别用三个变量存起来,保持max部分为大的日期,min为小的日期。
然后开始循环,直到min的年月日等于max的年月日为止,用count来统计他们之间相差的天数。
记得判断天是否超过了当月的天数和月数是否超过12月,有的话重置一下!
代码:
#include<iostream>
using namespace std;
int main()
{
int arr[13]={
0,31,28,31,30,31,30,31,31,30,31,30,31};
int day1,day2,count=0;
cin>>day1>>day2;
//保持max为大的那个数,然后分解出来
int max=day1>day2?day1:day2;
int maxday=max%100;
int maxmonth=(max/100)%100;
int maxyear=max/10000;
//保持min为小的那个数,然后分解出来
int min=day1>day2?day2:day1;
int minday=min%100;
int minmonth=(min/100)%100;
int minyear=min/10000;
//直到三个值相等才退出循环
while((minyear!=maxyear)||(minmonth!=maxmonth)||(minday<=maxday))
{
count++;
minday++;
//判断一下天数是否超过当月的最大天数
if(minday>arr[minmonth])
{
minday=1;
minmonth++;
//判断一下月数是否超过12
if(minmonth>12)
{
minmonth=1;
minyear++;
}
}
}
cout<<count;
return 0;
}

边栏推荐
- WR | Jufeng group of West Lake University revealed the impact of microplastics pollution on the flora and denitrification function of constructed wetlands
- 云安全日报220705:红帽PHP解释器发现执行任意代码漏洞,需要尽快升级
- Independent development is a way out for programmers
- Disabling and enabling inspections pycharm
- Vulnerability recurrence - 48. Command injection in airflow DAG (cve-2020-11978)
- 漫画:有趣的【海盗】问题
- 【二叉树】根到叶路径上的不足节点
- mongodb(快速上手)(一)
- 漫画:寻找股票买入卖出的最佳时机
- URP下Alpha从Gamma空间到Linner空间转换(二)——多Alpha贴图叠加
猜你喜欢

云主机oracle异常恢复----惜分飞

How to write a full score project document | acquisition technology

mongodb(快速上手)(一)

7. Scala class
一文了解MySQL事务隔离级别

Mongodb (quick start) (I)

VBA drives SAP GUI to realize office automation (II): judge whether elements exist
深入理解Redis内存淘汰策略
Tips for extracting JSON fields from MySQL

URP下Alpha从Gamma空间到Linner空间转换(二)——多Alpha贴图叠加
随机推荐
证券网上开户安全吗?证券融资利率一般是多少?
蚂蚁金服的暴富还未开始,Zoom的神话却仍在继续!
Which is more cost-effective, haqu K1 or haqu H1? Who is more worth starting with?
这个17岁的黑客天才,破解了第一代iPhone!
Knowledge points of MySQL (7)
Summary of optimization scheme for implementing delay queue based on redis
SQL Server(2)
查看自己电脑连接过的WiFi密码
漫画:如何实现大整数相乘?(整合版)
Cmake tutorial step6 (add custom commands and generate files)
机器学习01:绪论
Tita 绩效宝:如何为年中考核做准备?
哈趣K1和哈趣H1哪个性价比更高?谁更值得入手?
Database design in multi tenant mode
关于mysql中的json解析函数JSON_EXTRACT
Mysql5.6 parsing JSON strings (supporting complex nested formats)
云安全日报220705:红帽PHP解释器发现执行任意代码漏洞,需要尽快升级
ICML 2022 | Meta propose une méthode robuste d'optimisation bayésienne Multi - objectifs pour faire face efficacement au bruit d'entrée
[7.7 live broadcast preview] the lecturer of "typical architecture of SaaS cloud native applications" teaches you to easily build cloud native SaaS applications. Once the problem is solved, Huawei's s
一文读懂简单查询代价估算