△(提交未成功)【OJ】(二)---E---計算時間差



題目要求如下:

-----------------------------------------------------------------------------------------------------------------------------------------------

代碼如下:

/*
 * Copyright (c) 2013, 煙臺大學計算機學院
 * All rights reserved.
 * 作    者:  沈遠宏
 * 完成日期:2014 年06月11日
 * 版 本 號:v1.0
 * 問題描述:Description
對於按照"yyyymmddhhmmss"格式給定的時間,計算兩個時間的差值。其中yyyy 表示年(0000~3000),mm表示月(00~12),dd表示日(00~31),hh表示時(00~23),mm表示分(00~59),ss表示秒(00~59)。已給定類部分代碼,不可刪除和修改已有代碼,只可以擴充。
Input
第一行整數n(n<=100),表示需要計算的時間差值數目。以後n行,每行兩個用空格隔開的按照"yyyymmddhhmmss"格式的數字串。
Output
每組時間差值輸出單獨一行。用空格分隔的兩個數,表示兩個時間相差的天數和秒數。

*/
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
class DateTime
{
public:
    int year;
    int month;
    int day;
    int hour;
    int minute;
    int seconds;
public:
    void set(char*);
    int char2int(char c);
    void TimeDiff(DateTime &t1,DateTime &t2,int &days,int &seconds);
//對t1 ,t2 表示的兩個時間計算時間差值,將相差的天數保存在days中,將相差的秒數保存在seconds中
    int count_d();
    int count_s();
};
void DateTime::set(char* s)
{
    year=char2int(s[0])*1000+char2int(s[1])*100+char2int(s[2])*10+char2int(s[3]);
    month=char2int(s[4])*10+char2int(s[5]);
    day=char2int(s[6])*10+char2int(s[7]);
    hour=char2int(s[8])*10+char2int(s[9]);
    minute=char2int(s[10])*10+char2int(s[11]);
    seconds=char2int(s[12])*10+char2int(s[13]);
}
int DateTime::char2int(char c)
{
    int res=0;
    switch(c)
    {
    case '0':
        res=0;
        break;
    case '1':
        res=1;
        break;
    case '2':
        res=2;
        break;
    case '3':
        res=3;
        break;
    case '4':
        res=4;
        break;
    case '5':
        res=5;
        break;
    case '6':
        res=6;
        break;
    case '7':
        res=7;
        break;
    case '8':
        res=8;
        break;
    case '9':
        res=9;
        break;
    default:
        res=0;
    }
    return res;
}

void DateTime::TimeDiff(DateTime &t1,DateTime &t2,int &days,int &seconds)
{
    if(t1.year>t2.year)
    {
        for(int i=t2.year; i<(t1.year-t2.year); ++i)
        {
            if((i%4==0&&i%100!=0)||i%400==0)
            {
                days+=366;
            }
            else
            {
                days+=365;
            }
        }
        days=days-t1.count_d()+t2.count_d();
    }
    else if(t1.year<t2.year)
    {
        for(int i=t1.year; i<(t2.year-t1.year); ++i)
        {
            if((i%4==0&&i%100!=0)||i%400==0)
            {
                days+=366;
            }
            else
            {
                days+=365;
            }
        }
        days=days-t2.count_d()+t1.count_d();
    }
    else
    {
        if(t2.count_d()>t1.count_d())
        {
            days=t2.count_d()-t1.count_d();
        }
        else if(t2.count_d()<t1.count_d())
        {
            days=t1.count_d()-t2.count_d();
        }
        else days=0;

    }
    cout<<days<<" ";
    if(t1.hour>t2.hour)
    {
        seconds=t1.count_s()-t2.count_s();
    }
    else if(t1.hour<t2.hour)
    {
        seconds=t2.count_s()-t1.count_s();
    }
    else
    {
        if(t1.minute>t2.minute)
        {
            seconds=t1.count_s()-t2.count_s();
        }
        else if(t1.minute<t2.minute)
        {
            seconds=t2.count_s()-t1.count_s();
        }
        else
        {
            if(t1.seconds>t2.seconds)
            {
                seconds=t1.seconds-t2.seconds;
            }
            else if(t1.seconds<t2.seconds)
            {
                seconds=t2.seconds-t1.seconds;
            }
            else
            {
                seconds=0;
            }
        }
    }
    cout<<seconds<<endl;
}
int DateTime::count_d()
{
    int d;
    switch(month)
    {
    case 1:
        d=day;
        break;
    case 2:
        d=day+31;
        break;
    case 3:
        d=day+31+28;
        break;
    case 4:
        d=day+31+28+31;
        break;
    case 5:
        d=day+31+28+31+30;
        break;
    case 6:
        d=day+31+28+31+30+31;
        break;
    case 7:
        d=day+31+28+31+30+31+30;
        break;
    case 8:
        d=day+31+28+31+30+31+30+31;
        break;
    case 9:
        d=day+31+28+31+30+31+30+31+31;
        break;
    case 10:
        d=day+31+28+31+30+31+30+31+31+30;
        break;
    case 11:
        d=day+31+28+31+30+31+30+31+31+30+31;
        break;
    case 12:
        d=day+31+28+31+30+31+30+31+31+30+31+30;
        break;
    }
    if((year%4==0&&year%100!=0)||year%400==0)//閏年366
    {
        d++;
    }
    return d;
}
int DateTime::count_s()
{
    return 3600*hour+60*minute+seconds;
}
int main()
{
    int n,days=0,seconds=0;
    DateTime d1,d2;
    char s1[14],s2[14];
    freopen("E.txt","r",stdin);
    cin>>n;
    for(int i=0; i<n; ++i)
    {
        for(int j=0; j<14; ++j)
        {
            cin>>s1[j];
        }
        for(int j=0; j<14; ++j)
        {
            cin>>s2[j];
        }
        d1.set(s1);
        d2.set(s2);
        d1.TimeDiff(d1,d2,days,seconds);
    }
    return 0;
}

運行結果:


OJ要求結果輸出例樣:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章