题目描述
定义CMoney类,包含元、角、分三个数据成员,友元函数重载‘+’、‘-’,实现货币的加减运算(假设a-b中a的金额始终大于等于b的金额),重载输入、输出,实现货币的输入,输出。
读入最初的货币值,对其不断进行加、减操作,输出结果。
可根据需要,为CMoney类添加构造函数或其它成员函数。
输入
测试次数
每组测试数据格式如下:
第一行,初始货币:元 角 分
第二行开始,每行一个操作:add 元 角 分(加)、minus 元 角 分(减)、stop(结束)
输出
对每组测试数据,输出操作终止后的货币金额,具体输出格式见样例。
输入样例
2
0 0 0
add 48 9 0
minus 0 5 3
add 18 6 8
add 12 1 2
stop
10 2 5
add 5 8 0
add 32 1 2
minus 10 5 9
minus 37 5 8
stop
输出样例
79元1角7分
0元0角0分
代码
#include<iostream>
#include<string>
using namespace std;
class CMoney{
private:
int yuan,jiao,fen;
public:
CMoney(int y,int j,int f):yuan(y),jiao(j),fen(f){}
friend CMoney operator +(CMoney&,CMoney&);
friend CMoney operator -(CMoney&,CMoney&);
void show(){
cout<<yuan<<"元"<<jiao<<"角"<<fen<<"分"<<endl;
}
};
CMoney operator +(CMoney &c1,CMoney &c2){
int y,j,f;
y=c2.yuan+c1.yuan;
j=c1.jiao+c2.jiao;
f=c1.fen+c2.fen;
int mo=0;
if(f>=10)
{
mo=f/10;
f-=mo*10;
j+=mo;
}
if(j>=10)
{
mo=j/10;
j-=mo*10;
y+=mo;
}
return CMoney(y,j,f);
}
CMoney operator -(CMoney &c1,CMoney &c2){
int mo;
int m1,m2,y,j,f;
m1=c1.yuan*100+c1.jiao*10+c1.fen;
m2=c2.yuan*100+c2.jiao*10+c2.fen;
if(m1<m2)
mo=m2-m1;
else
mo=m1-m2;
y=mo/100;
j=((mo/10)*10-y*100)/10;
f=mo-(mo/10)*10;
return CMoney(y,j,f);
}
int main()
{
int t;
int y,j,f;
string a;
cin>>t;
while(t)
{
cin>>y>>j>>f;
CMoney money(y,j,f);
while(1)
{
cin>>a;
if(a=="stop")
{
money.show();
break;
}
else if(a=="add"){
cin>>y>>j>>f;
CMoney money1(y,j,f);
money=money + money1;
}
else{
cin>>y>>j>>f;
CMoney money1(y,j,f);
money=money - money1;
}
}
t--;
}
return 0;
}