7-4 时间模拟

给出下面的基类Time的框架如下:

class Time

{
protected:

    int second;
    int minute;
    int hour;

public:

     void operator++();
     void operator--();

}

建立一个派生类Time_12hours,用于表示十二进制时间,增加以下成员数据:

string type;//标识为12进制时间,type=”12-hours-time”

string interval;//标识为AM或者PM,interval=”AM”或interval=”PM”

增加以下成员函数:
void operator++();

     void operator--();

建立一个派生类Time_24hours,用于表示二十四进制时间,增加以下成员数据:

     string type;//标识为24进制时间,type=”24-hours-time”

增加以下成员函数:

     void operator++();

     void operator--();

生成上述类并编写主函数,根据输入的初始时间信息、自增或者自减类型、自增或者自减次数,输出其最后时间信息。

输入格式:测试输入包含多个测试用例,一个测试用例为一行,每行共五个数字,第一个数字为进制,121表示输入为12进制AM时间,122表示输入为12进制PM时间,输入为24表示输入为24进制时间,第二个数字为hour,第三个数字为minute,第四个数字为second,第五个字符为运算类型,+表示自增,-表示自减,第六个数字为运算次数,0表示测试用例结束。

输入样例:

121 11 59 59 + 3

24 11 59 59 + 3

122 11 59 59 + 3

122 00 00 00 - 3

121 00 00 00 - 5

24 00 00 00 - 1

0

输出样例:

PM 00:00:02

12:00:02

AM 00:00:02

AM 11:59:57

PM 11:59:55

23:59:59

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

因为我想偷懒,就没有进行Time类的设计,直接在最后把24小时制的转化一下而已。

#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class Time{
    public:
    int second;
    int minute;
    int hour;
    public:
    void operator++();
    void operator--();
};
class Time_24hours:public Time{
    public:
    string type;
    string interval;
    public:
    void changeInterval(){
        
        if(interval=="AM"){
            interval="PM";
            //cout<<"change"<<endl;
        }
        else if(interval=="PM"){
            interval="AM";
            //cout<<"change"<<endl;
        }
    }
    Time_24hours(int s,int m,int h,string i){
        second=s;
        minute=m;
        hour=h;
        interval=i;
    }
    public:
    void operator++(){
        if(second<59){
            second++;
        }else{
            second=0;
            if(minute<59){
                minute++;
            }else{
                minute=0;
                if(hour<11){
                    hour++;
                }else{
                    hour=0;
                    changeInterval();
                }
            }
        }
    }
    void operator--(){
        if(second>0){
            second--;
        }else{
            second=59;
            if(minute>0){
                minute--;
            }else{
                minute=59;
                if(hour>0){
                    hour--;
                }else{
                    hour=11;
                    changeInterval();
                }
            }
        }
    }
};
int main(){
    string jin;
    int s,m,h,n;
    char op;
    while(1){
        cin>>jin;
        if(jin=="121"){
            cin>>h>>m>>s>>op>>n;
            Time_24hours t(s,m,h,"AM");
            while(n!=0){
                if(op=='+') ++t;
                else --t;
                n--;
            }
            cout << t.interval << " "
            << setw(2) << setfill('0') << t.hour <<":" 
		    << setw(2) << setfill('0') << t.minute <<":"
		    << setw(2) << setfill('0') << t.second << endl;
        }
        if(jin=="122"){
            cin>>h>>m>>s>>op>>n;
            Time_24hours t(s,m,h,"PM");
            while(n--){
                if(op=='+') ++t;
                else --t;
            }
            cout << t.interval << " "
            << setw(2) << setfill('0') << t.hour <<":" 
		    << setw(2) << setfill('0') << t.minute <<":"
		    << setw(2) << setfill('0') << t.second << endl;
        }
        if(jin=="24"){
            cin>>h>>m>>s>>op>>n;
            Time_24hours t(s,m,h,"AM");
            if(h>11){
                t.hour-=12;
                t.interval="PM";
            }
            while(n--){
                if(op=='+') ++t;
                else --t;
            }
            if(t.interval=="PM") t.hour+=12;
            cout 
            << setw(2) << setfill('0') << t.hour <<":" 
		    << setw(2) << setfill('0') << t.minute <<":"
		    << setw(2) << setfill('0') << t.second << endl;
        }
        if(jin=="0") break;
    }
    return 0;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值