△(提交未成功)【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要求结果输出例样:

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