一、题目描述
定义CMoney类,包含元、角、分三个数据成员,友元函数重载‘+’、‘-’,实现货币的加减运算(假设a-b中a的金额始终大于等于b的金额),
重载输入及输出,实现货币的输入,输出。
读入最初的货币值,对其不断进行加、减操作,输出结果。
可根据需要,为CMoney类添加构造函数或其它成员函数。
二、输入与输出
1.输入
测试次数
每组测试数据格式如下:
第一行,初始货币:元 角 分
第二行开始,每行一个操作: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
2.输出
对每组测试数据,输出操作终止后的货币金额,具体输出格式见样例。
79元1角7分
0元0角0分
三、参考代码
#include<iostream>
using namespace std;
class mon
{
int yuan, jiao, fen;
public:
mon() { yuan = 0; jiao = 0; fen = 0; }
mon(int y,int j,int f):yuan(y),jiao(j),fen(f){}
friend ostream& operator <<(ostream& cout, mon& p)
{
cout << p.yuan << "元" << p.jiao << "角" << p.fen << "分" << endl;
return cout;
}
friend istream& operator >>(istream& cin, mon& p)
{
cin >> p.yuan >> p.jiao >> p.fen;
return cin;
}
friend mon operator+ (mon& p1, mon& p2)
{
int p1fen = p1.fen + 10 * p1.jiao + 100 * p1.yuan;
int p2fen = p2.fen + 10 * p2.jiao + 100 * p2.yuan;
int sum = p1fen + p2fen;
int f = sum % 10;
int j = sum / 10 % 10;
int y = sum / 100;
mon temp(y, j, f);
return temp;
}
friend mon operator- (mon& p1, mon& p2)
{
int p1fen = p1.fen + 10 * p1.jiao + 100 * p1.yuan;
int p2fen = p2.fen + 10 * p2.jiao + 100 * p2.yuan;
int sum = p1fen - p2fen;
int f = sum % 10;
int j = sum / 10 % 10;
int y = sum / 100;
mon temp(y, j, f);
return temp;
}
};
int main()
{
int sum;
int y, j, f;
string caozuo;
cin >> sum;
while (sum--) {
mon c1;
cin >> c1;
cin >> caozuo;
mon c2;
while (caozuo != "stop")
{
if (caozuo == "add")
{
cin >> c2;
c1 = c1 + c2;
}
if (caozuo == "minus")
{
cin >> c2;
c1 = c1 - c2;
}
cin >> caozuo;
}
cout << c1;
}
}