6-3 算算你的人民币 (20分)
定义一个RMB类 Money,包含元、角、分三个数据成员,友元函数重载运算符‘+’(加) 和 ‘-’(减),实现货币的加减运算
函数接口定义:
在这里描述函数接口。例如:
Money operator+(Money a, Money b);
Money operator-(Money a, Money b);
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
#include <iostream>
using namespace std;
class Money
{
private:
int yuan, jiao, fen;
bool flag; //标志位,0表示钱数为正,1表示钱数为负 -> 默认结果的钱数为正
public:
Money();
Money(int fg, int y=0, int j=0, int f=0): yuan(y), jiao(j), fen(f), flag(fg){}
friend Money operator+(Money a, Money b);
friend Money operator-(Money a, Money b);
void display();
};
Money::Money()
{
flag = 0;
//cout << "请输入元、角 分:" <<endl;
cin >> yuan >> jiao >> fen;
}
void Money::display()
{
if(flag==1) cout << '-';
cout << yuan << "元" << jiao << "角" << fen << "分" << endl;
}
/* 请在这里填写答案 */
int main()
{
Money m1, m2, m3(0), m4(0); //m3用来记录和,m4用来记录差
// +
m3=m1+m2;
cout<<"和:";
m3.display();
// -
m4=m1-m2;
cout<<"差:";
m4.display();
return 0;
}
输入样例:
在这里给出一组输入。例如:
2 3 4
3 7 3
输出样例:
在这里给出相应的输出。例如:
和:6元0角7分
差:-1元3角9分
代码实现:
Money operator+(Money a, Money b)
{
Money M(0,0,0);
M.fen += a.fen + b.fen;
if(M.fen>=10)
{
M.jiao++;
M.fen = M.fen%10;
}
M.jiao += a.jiao + b.jiao;
if(M.jiao>=10)
{
M.yuan++;
M.jiao = M.jiao%10;
}
M.yuan += a.yuan + b.yuan;
return M;
}
Money operator-(Money a, Money b)
{
Money M(0,0,0);
int A = a.yuan*100 + a.jiao*10 + a.fen;
int B = b.yuan*100 + b.jiao*10 + b.fen;
int s = 0;
if (A>B)
{
s += A - B;
M.flag = 0;
}
else
{
s += B - A;
M.flag = 1;
}
M.fen = M.fen + s%10;
s = (s - s%10)/10;
M.jiao = M.jiao + s%10;
s = (s - s%10)/10;
M.yuan = M.yuan + s;
return M;
}