欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 牛客——日期到天数的转换,日期的差值(C++)

牛客——日期到天数的转换,日期的差值(C++)

2025/10/20 2:55:29 来源:https://blog.csdn.net/2401_83456040/article/details/144260171  浏览:    关键词:牛客——日期到天数的转换,日期的差值(C++)

目录

1.日期到天数的转化

1.1题目描述

 1.2思路

1.3代码

2.日期差值

2.1题目描述

2.2思路

2.3代码

1.日期到天数的转化

1.1题目描述

根据输入的日期,计算是这一年的第几天。保证年份为4位数且日期合法。时间复杂度:O(n) ,空间复杂度: O(1) 。

示例:

 1.2思路

首先可以创建一个数组,存放为一月到该月一共有几天,这里一年有12个月,可以创建大小为13,对齐,0下标对于日期不存在0月,就直接存放0,其他的按下标依次存放,这里先以不是闰年的情况,创建,后面再判断是否闰年(判断条件是:四年一润,百年不润,四百年一润),如果是再++,这里,注意:找日期有多少天,一定是到该月的前一个月,再加天数,不然会多加一个月

1.3代码

#include<iostream>
using namespace std;
int main()
{int year, month, day;while(cin>>year>>month>>day){int monthDays[13] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};int nday = monthDays[month-1] + day;if(month > 2 && ((year % 4 == 0 && year % 100 != 0) ||year % 400 == 0)){nday += 1;}cout<<nday<<endl;}return 0;
}

2.日期差值

2.1题目描述

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天,有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD。

示例:

2.2思路

这里通过上题可以判断月份的天数,这里还需要有年,所以还要确定年的天数,这里的总体思路是将年月日全部转换成天数,再相减,所以需要计算年的天数,根据闰年规则可以得到公式int yearDay = y*365+y/4-y/100+y/400;再利用第一问的思想算出月份的天数,最后再相减,注意:这里的输入格式获取,年月日,可以通过scanf来获取每次写入的个数即: scanf("%4d%2d%2d",&year1,&month1,&day1);

2.3代码

#include <iostream>
using namespace std;int mon[12]={0,31,59,90,120,151,181,212,243,273,304,334};//给出年月日,计算距离0000年0月1日的天数和int CountDay(int y,int m,int d){// 计算0-y年的天数int yearDay = y*365+y/4-y/100+y/400;// 计算到0-m月的天数int monthDay = mon[m-1];if(m > 2 && ((y%4 == 0 && y%100 != 0) || y%400==0))monthDay += 1;return yearDay + monthDay + d;}int main(){int year1,month1,day1;scanf("%4d%2d%2d",&year1,&month1,&day1);int n1 = CountDay(year1,month1,day1);int year2,month2,day2;scanf("%4d%2d%2d",&year2,&month2,&day2);int n2 = CountDay(year2,month2,day2);cout<<abs(n1-n2)+1<<endl;return 0;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com