两日期之间的天数

题目描述
请你编写一个程序来计算两个日期之间隔了多少天。

日期以字符串形式给出,格式为 YYYY-MM-DD,如示例所示。

输入格式
字符串。

输出格式
字符串。

输入/输出样例
输入1
"2020-02-15", "2019-12-31"

输出1
46

说明/提示
给定的日期是 1980 年到 2100 年之间的有效日期

//代码如下:

/*

解析日期

计算从固定日期出发的时间1980 1 1

*/

#include <iostream>

#include <cstring>

#include <vector>

#include <algorithm>

#define leap(year)  (year%4==0&&year%100!=0)||(year%400==0)

using namespace std;

int data[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

int caclulate(int YYYY,int MM,int DD){

    //计算到达固定日期的天数

    int res=0;

    int sumyear=0;

    //计算整年的天数

    for(int i=1;i<=12;i++){

        sumyear+=data[i];}

    //处理年数

    for(int i=1980;i<YYYY;i++){

        if(leap(i))

        res+=(sumyear+1);

        else

        res+=sumyear;}

    //处理月数

    for(int i=1;i<MM;i++){

        res+=data[i];

    }

    //处理天数

    for(int i=1;i<=DD;i++){

        res+=1;

    }

    //处理闰年

    if((leap(YYYY))&&MM>2)res++;

    return res;

}

//解析字符串

vector<int> produce(char *str){

        char *token=strtok(str,"-");

        //分割字符串函数

        vector<int> num;

        while(token){

        num.push_back(stoi(token));

        token=strtok(NULL,"-");}

        return num;

}

int main(){

    int temp[2];

    int i=0;

    while(1){

        char riqi[11];

        if(scanf("%s",riqi)!=1)

        break;

       vector<int> num=produce(riqi);

       temp[i++]=caclulate(num[0],num[1],num[2]);

    }

    cout<<abs(temp[1]-temp[0])<<endl;

    return 0;

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值