首页 > 代码库 > 【模拟】日期差
【模拟】日期差
【题目描述】 给你两个日期,问这两个日期差了多少毫秒。
【输入格式】 两行,每行一个日期,日期格式保证为“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%的数据,两个日期的年份一定相同。 对于 100%的数据,两个日期一定都是 21 世纪的某一天,且第二个日期一定大于等于第一个日。
这个题纯模拟,然而我思考了一小时,debug了一小时仍完AC,于是先打算弃坑。等下次有机会再补上。
大概思路就是: 求出第一个日期到XXXX-01-01 00:00:00的时间 记为x1
求出第二个日期到XXXX-01-01 00:00:00的时间 记为x2
求出第一个日期 到 第二个日期的 年份差 转换成秒 记为x3
然后把x3+x2-x1这个值再乘上*1000,就是最后值。
附上自己错误的代码
#include <iostream>#include <string>#include <cstdio> using namespace std;int Nor[]={0,31,28,31,30,31,30,31,31,30,31,30,31};int Yesr[]={0,31,29,31,30,31,30,31,31,30,31,30,31};int a[7],b[7];long long miao=0,flag=0,cha=0,sb=0,total=0;char s;bool r(int y){ if(y % 4 == 0 && y % 100 != 0 || y % 400 ==0) { return true; } else { return false; } }long long yue(int month,int day,int flag){ int miao=0; if(flag==1){ for(int i=1;i<month;i++){ miao+=Yesr[i]; } day = day - 1; miao= (miao+day)*24*3600; return miao; } else{ for(int i=1;i<month;i++){ miao+=Nor[i]; } miao= (miao+day)*24*3600; return miao; }}long long nian(int year1,int year2){ int cha=0; for(int i=year1;i<=year2;i++){ if( r(i) ) cha+=366; else cha+=365; } cha = cha * 3600; return cha;}int main(){ scanf("%d-%d-%d %d:%d:%d",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6]); scanf("%d-%d-%d %d:%d:%d",&b[1],&b[2],&b[3],&b[4],&b[5],&b[6]); if( r(a[1]) ) flag=1; else flag=0; miao=a[6]+a[5]*60+a[4]*3600+yue (a[2],a[3],flag); cha=nian(a[1],b[1]); if( r(b[1]) ) flag=0; else flag=0; sb=b[6]+b[5]*60+b[4]*3600+yue(b[2],b[3],flag)*3600; total = (sb + cha - miao)*1000; cout<<total<<endl; return 0;}
这大概是自己写过最长的模拟题了
【模拟】日期差
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。