码迷,mamicode.com
首页 > 其他好文 > 详细

【模拟】日期差

时间:2016-11-13 02:08:42      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:image   pre   ios   contract   技术   debug   display   大于等于   思路   

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

【输入格式】 两行,每行一个日期,日期格式保证为“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;
}
错误代码

这大概是自己写过最长的模拟题了

【模拟】日期差

标签:image   pre   ios   contract   技术   debug   display   大于等于   思路   

原文地址:http://www.cnblogs.com/OIerLYF/p/6057875.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!