1360. 日期之间隔几天 - 力扣(LeetCode) (leetcode-cn.com)
1、首先,写一个函数将日期字符串转换成具体的日期数字,然后再通过两个日期去求出他们之间的天数。
strtoint函数为日期字符串转换成具体数字的函数,由于,我们知道年月日之间都有‘-’符号作为分界,所以,以此来区分年月日,将三个数字分别储存到大小为3的数组中。
bigfron函数是判断输入的日期哪个大,哪个小(这个根据具体的题目具体分析,或者在getday函数中修改一下,从而使得不需要判断getday函数两个日期的大小顺序)
jugr函数为判断该年是否为闰年,是则返回true,不是则返回false。
getday函数计算两个年份之间的天数,先减去日期小的月和日的天数,加上日期大的月和日的天数,最后计算出两个年份之间的天数相加即可。
class Solution {
public:
int daysBetweenDates(string date1, string date2) {
int d1[3],d2[3];
strtoint(date1,d1);
strtoint(date2,d2);
bigfron(d1,d2);
int day=getday(d1,d2);
return day;
}
void strtoint(string s,int* date)
{
int cnt=0;
for(int i=0;i<3;++i)
{
date[i]=0;
while(s[cnt]!='-'&&s[cnt]!='\0') date[i]=date[i]*10+(s[cnt++]-'0');
cnt++;
}
}
bool jugr(int year)
{ return year%4==0 && year%100 || year%400==0;}
void bigfron(int* date1,int* date2)
{
if(date1[0]>date2[0]||(date1[0]==date2[0]&&date1[1]>date2[1])||(date1[0]==date2[0]&&date1[1]==date2[1]&&date1[2]>date2[2]))
{
for(int i=0;i<3;++i)
{
int tmp=date1[i];
date1[i]=date2[i];
date2[i]=tmp;
}
}
}
int getday(int* date1,int* date2)
{
int monthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int sum=0;
monthday[2]=jugr(date1[0])?29:28;
sum-=date1[2];
for(int i=date1[1]-1;i>0;--i) sum-=monthday[i];
monthday[2]=jugr(date2[0])?29:28;
sum+=date2[2];
for(int i=date2[1]-1;i>0;--i) sum+=monthday[i];
for(int i=date1[0];i<date2[0];++i) sum+=jugr(i)? 366:365;
return sum;
}
};