7-4 时间模拟 (50分) pta c++
给出下面的基类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
#include <iostream> #include<cmath> #include<cstdio> #include<iomanip> using namespace std; class Time{ protected: int second; int minute; int hour; public: Time(int s,int m,int h):second(s),minute(m),hour(h){} void operator++(); void operator--(); void print(){ cout<<setw(2) << setfill('0')<<hour<<":"; cout<<setw(2) << setfill('0')<<minute<<":"; cout<<setw(2) << setfill('0')<<second<<endl; } }; void Time::operator++(){ second++; while(second>=60){ second-=60; minute++; } while(second<0){ second+=60; minute--; } while(minute>=60){ minute-=60; hour++; } while(minute<0){ minute+=60; hour--; } while(hour>=24){ hour-=24; } while(hour<0){ hour+=24; } } void Time::operator--(){ second--; while(second>=60){ second-=60; minute++; } while(second<0){ second+=60; minute--; } while(minute>=60){ minute-=60; hour++; } while(minute<0){ minute+=60; hour--; } while(hour>=24){ hour-=24; } while(hour<0){ hour+=24; } } class Time_12hours:public Time{ int type=0; public: Time_12hours(int s,int m,int h,int type):Time(s,m,h),type(type){} void operator++(); void operator--(); void print(){ if(type==0)cout<<"AM"<<" "; else{cout<<"PM"<<" ";} cout<<setw(2) << setfill('0')<<hour<<":"; cout<<setw(2) << setfill('0')<<minute<<":"; cout<<setw(2) << setfill('0')<<second<<endl; } }; void Time_12hours::operator++(){ second++; while(second>=60){ second-=60; minute++; } while(second<0){ second+=60; minute--; } while(minute>=60){ minute-=60; hour++; } while(minute<0){ minute+=60; hour--; } while(hour>=12){ hour-=12; type=1-type; } while(hour<0){ hour+=12; type=1-type; } } void Time_12hours::operator--(){ second--; while(second>=60){ second-=60; minute++; } while(second<0){ second+=60; minute--; } while(minute>=60){ minute-=60; hour++; } while(minute<0){ minute+=60; hour--; } while(hour>=12){ hour-=12; type=1-type; } while(hour<0){ hour+=12; type=1-type; } } int main( ) { int type=24,h,m,s; while(1){ cin>>type; if(type==0)break; cin>>h>>m>>s; if(type==121){ Time_12hours b(s,m,h,0); string h; cin>>h; int count=0; cin>>count; if(h=="+"){ for(int i=0;i<count;i++){ b.operator++(); } }else{ for(int i=0;i<count;i++){ b.operator--(); } } b.print(); }else if(type==122){ Time_12hours b(s,m,h,1); string h; cin>>h; int count=0; cin>>count; if(h=="+"){ for(int i=0;i<count;i++){ b.operator++(); } }else{ for(int i=0;i<count;i++){ b.operator--(); } } b.print(); }else{ Time b(s,m,h); string h; cin>>h; int count=0; cin>>count; if(h=="+"){ for(int i=0;i<count;i++){ b.operator++(); } }else{ for(int i=0;i<count;i++){ b.operator--(); } } b.print(); } } return 0; }

浙公网安备 33010602011771号