题目描述
杰克船长的“黑珍珠号”误入了一片海域,一翻风浪过后,他发现自己穿越到了一个未知且神奇的岛屿上,岛屿上空无一物,只有一块写着字的牌子,上面写着:欢迎来到这里,参加我们的时间旅行计划,现在的时间是X年Y月Z号的0时0分0秒,你将会被穿越至XX年YY月 ZZ号的0时0分0秒,你必须尽快计算出来这两个日期之间相隔了多长时间,才能被传送回来,否则就将永远的停留在那里。需要注意的是,你将要计算的不是这两个日期之间相差的天数,而是相差了多少秒,即X年Y月Z号的0时0分0秒,与XX年YY月ZZ号的0时0分0秒相差的秒数。在我们这,日期计算方式和你们相同,存在品闰年和大小月,一天同样有24个小时,但是每小时有6666666666分钟,每分钟有6666666666秒,祝你好运!
输入格式
两行,每行三个整数,分别表示X,Y,Z 以及 XX,YY,ZZ(1<=X,XX<=9999,1<=Y,YY<=12,1<=Z,ZZ<=31)
输出格式
输出一个整数,表示两个日期之间相差的秒数,结果可能会超出longlong范围
输入输出样例
输入样例1:
2023 8 18 2023 8 28
输出样例1:
10666666664533333333440
【耗时限制】1000ms 【内存限制】128MB
主要就是高精度和天数的计算
代码:
#include <bits/stdc++.h>
using namespace std;
int mday[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int tian(int y,int m,int d){//计算天数int sum=0;for(int i=1;i<=y-1;i++)if(i%4==0&&i%100!=0||i%400==0)sum+=366;else sum+=365;if(y%4==0&&y%100!=0||y%400==0)mday[2]=29;else mday[2]=28;for(int i=1;i<=m-1;i++)sum+=mday[i];return sum+d;
}
int a[210],b[210],c[410];
string cheng(string as,string bs){//高精度memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));int alen=as.size(),blen=bs.size();int clen=alen+blen;for(int i=1;i<=alen;i++) a[i]=as[alen-i]-'0';for(int i=1;i<=blen;i++) b[i]=bs[blen-i]-'0';for(int i=1;i<=alen;i++)for(int j=1;j<=blen;j++){c[i+j-1]+=a[i]*b[j];c[i+j]+=c[i+j-1]/10;c[i+j-1]%=10;}while(c[clen]==0&&clen>1) clen--;string cs;for(int i=clen;i>=1;i--) cs+=c[i]+'0';return cs;
}
int x, y, z, xx, yy, zz;
string s;
int main(){freopen("through.in","r",stdin);freopen("through.out","w",stdout);cin>>x>>y>>z>>xx>>yy>>zz;int day=abs(tian(x,y,z)-tian(xx,yy,zz));stringstream sin;sin<<day;sin>>s;cout<<cheng(cheng(cheng(s,"24"),"6666666666"),"6666666666");return 0;
}