时间计算

【题目描述】 给你两个日期,问这两个日期差了多少毫秒。

【输入格式】 两行,每行一个日期,日期格式保证为“YYYY-MM-DD hh:mm:ss”这种形 式。第二个日期时间一定比第一个日期时间要大两个日期的年份一定都是 21 世 纪的年份。

【输出格式】 一行一个整数代表毫秒数。

【样例输入 1】 2000-01-01 00:00:00 2000-01-01 00:00:01 【样例输出 1】 1000

【样例输入 2】 2000-01-01 00:00:00 2000-11-11 00:00:00 【样例输出 2】 27216000000

 【数据范围与规定】 对于10%的数据,两个日期相同。 对于20%的数据,两个日期只有秒数可能不同。

对于30%的数据,两个日期只有秒数、分钟数可能不同。 对于40%的数据,两个日期的年月日一定相同。 对于60%的数据,两个日期的年月一定相同。

对于80%的数据,两个日期的年份一定相同。 P73 第二题 第 3 页

对于100%的数据,两个日期一定都是 21 世纪的某一天,且第二个日期一定 大于等于第一个日期。

思路:

  模拟吧,好麻烦,搞错一个变量,幸好检查出来了,但只改了一处其他地方没改。。。

  

  第一遍90  第二遍100

#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
long long  yeara,moutha,daya,aa,ba,ca;
long long  yearb,mouthb,dayb,ab,bb,cb;
long long ans;
int main()
{
    freopen("two.in","r",stdin);
    freopen("two.out","w",stdout);
    char c1,c2,c3,c4,c5,c6;
    scanf("%lld%c%lld%c%lld%c%lld%c%lld%c%lld",&yearb,&c1,&mouthb,&c2,&dayb,&c3,&ab,&c4,&bb,&c5,&cb);
    scanf("%lld%c%lld%c%lld%c%lld%c%lld%c%lld",&yeara,&c1,&moutha,&c2,&daya,&c3,&aa,&c4,&ba,&c5,&ca);
    
    if(yeara==yearb)
    {
        for(long long i=mouthb+1;i<=moutha-1;i++)
        {
            if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
                ans+=1LL*31*24*60*60;
            else
            if(i==4||i==6||i==9||i==11)
                ans+=1LL*30*24*60*60;
            else 
            if(i==2)
                if((yearb%4) ==0)
                    ans+=29LL*24*60*60;
                else ans+=28LL*24*60*60;
        }
        if(moutha>mouthb)
        {
            ans+=(daya)*24LL*60*60;
            if(mouthb==1||mouthb==3||mouthb==5||mouthb==7||mouthb==8||mouthb==10||mouthb==12)
                ans+=(31-dayb)*1LL*24*60*60;
            else
            if(mouthb==4||mouthb==6||mouthb==9||mouthb==11)
                ans+=(30-dayb)*1LL*24*60*60;
            else 
            if(mouthb==2)
                if((yeara%4) ==0)
                    ans+=(29-dayb)*1LL*24*60*60;
                else ans+=(28-dayb)*1LL*24*60*60;
        }else         
            ans+=(daya-dayb)*24LL*60*60;
        
        ans+=(aa-ab)*60*60LL;
        ans+=(ba-bb)*60LL;
        ans+=(ca-cb);
        cout<<ans*1000;
        return 0;
    }else
    {
        for(int i=yearb+1;i<=yeara-1;i++)
            if(i%4)    ans+=365LL*24*60*60;
            else ans+= 366LL*24*60*60; 
        
        for(long long i=1;i<=moutha-1;i++)        
        {
            if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
                ans+=1LL*31*24*60*60;
            else
            if(i==4||i==6||i==9||i==11)
                ans+=1LL*30*24*60*60;
            else 
            if(i==2)
                if((yeara%4) ==0)
                    ans+=29LL*24*60*60;
                else ans+=28LL*24*60*60;
        }
        for(int i=mouthb+1;i<=12;i++)
        {
            if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
                ans+=1LL*31*24*60*60;
            else
            if(i==4||i==6||i==9||i==11)
                ans+=1LL*30*24*60*60;
            else 
            if(i==2)
                if((yearb%4) ==0)
                    ans+=29LL*24*60*60;
                else ans+=28LL*24*60*60;
        }        
        if(mouthb==1||mouthb==3||mouthb==5||mouthb==7||mouthb==8||mouthb==10||mouthb==12)
                ans+=(31-dayb)*1LL*24*60*60;
        else
        if(mouthb==4||mouthb==6||mouthb==9||mouthb==11)
            ans+=(30-dayb)*1LL*24*60*60;
        else 
        if(mouthb==2)
            if((yearb%4) ==0)
                ans+=(29-dayb)*1LL*24*60*60;
            else ans+=(28-dayb)*1LL*24*60*60;
            
        ans+=(daya)*24LL*60*60;
        ans+=(aa-ab)*60*60LL;//上边改了,这里没改
        ans+=(ba-bb)*60LL;
        ans+=(ca-cb);
        cout<<ans*1000;
    //    cout<<ans/3600/24;
        return 0;
    }
    return  0;
}

 

posted @ 2017-10-06 06:33  浪矢-CL  阅读(293)  评论(0编辑  收藏  举报