【id:322】【1分】H. 货币加减(输入输出重载)
时间限制
1s
内存限制
128MB
题目描述
定义CMoney类,包含元、角、分三个数据成员,友元函数重载‘+’、'-',实现货币的加减运算(假设a-b中a的金额始终大于等于b的金额),重载输入、输出,实现货币的输入,输出。
读入最初的货币值,对其不断进行加、减操作,输出结果。
可根据需要,为CMoney类添加构造函数或其它成员函数。
输入
测试次数
每组测试数据格式如下:
第一行,初始货币:元 角 分
第二行开始,每行一个操作:add 元 角 分(加)、minus 元 角 分(减)、stop(结束)
输出
对每组测试数据,输出操作终止后的货币金额,具体输出格式见样例。
样例查看模式
正常显示
查看格式
输入样例1 <-复制
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
输出样例1
79元1角7分
0元0角0分
Das Format der Operatorüberladung:
CMoney &operator+(CMoney one) {
int temp = (y + one.y) * 100 + (j + one.j) * 10 + (f + one.f);
y = Temperatur / 100;
j = (Temperatur % 100) / 10;
f = Temperatur % 10;
return *this;
}
#include<iostream>
#include<string>
#include<cstring>
#include <iomanip>
#define PI 3.14
using namespace std;
//定义 CMoney 类,包含元、角、分三个数据成员,友元函数重载‘+’、'-',
// 实现货币的加减运算(假设a-b中a的金额始终大于等于b的金额),重载输入、输出,实现货币的输入,输出。
class CMoney {
public:
int y;
int j;
int f;
CMoney(int y, int j, int f) : y(y), j(j), f(f) {}
CMoney &operator+(CMoney one) {
int temp = (y + one.y) * 100 + (j + one.j) * 10 + (f + one.f);
y = temp / 100;
j = (temp % 100) / 10;
f = temp % 10;
return *this;
}
CMoney &operator-(CMoney one) {
int temp = (y - one.y) * 100 + (j - one.j) * 10 + (f - one.f);
y = temp / 100;
j = (temp % 100) / 10;
f = temp % 10;
return *this;
}
void print() {
cout << y << "元" << j << "角" << f << "分" << endl;
}
};
int main() {
//测试次数
//
// 每组测试数据格式如下:
//
// 第一行,初始货币:元 角 分
//
// 第二行开始,每行一个操作:add 元 角 分(加)、minus 元 角 分(减)、stop(结束)
int times;
cin >> times;
int y;
int j;
int f;
while (times--) {
cin >> y >> j >> f;
CMoney cMoney(y, j, f);
string oper = "";
cin >> oper;
while (oper != "stop") {
cin >> y >> j >> f;
CMoney temp(y, j, f);
if (oper == "add") {
cMoney = cMoney + temp;
} else if (oper == "minus") {
cMoney = cMoney - temp;
}
cin >> oper;
}
cMoney.print();
}
}