1. 程式人生 > >時間計算

時間計算

() lld else ring 範圍 年份 amp n) 輸出格式

【題目描述】 給你兩個日期,問這兩個日期差了多少毫秒。

【輸入格式】 兩行,每行一個日期,日期格式保證為“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; }

時間計算