力扣:1360. 日期之间隔几天

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;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值