【C++】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

输出样例:

和:607分 
差:-139

代码:

Money operator+(Money a, Money b)
{
	Money c(0);
	c.fen = a.fen + b.fen;
	if (c.fen >= 10) { c.fen = c.fen % 10; a.jiao++; }
	c.jiao = a.jiao + b.jiao;
	if (c.jiao >= 10) { c.jiao = c.jiao % 10; a.yuan++; }
	c.yuan = a.yuan + b.yuan;
	return c;
}

Money operator-(Money a, Money b)
{
	Money c(0);
	int suma = 100 * a.yuan + 10 * a.jiao + a.fen;
	int sumb = 100 * b.yuan + 10 * b.jiao + b.fen;
	int sumc = abs(suma - sumb);
	if (suma - sumb < 0) { c.flag = 1; }
	c.fen = sumc % 10;
	sumc /= 10;
	c.jiao = sumc % 10;
	sumc /= 10;
	c.yuan = sumc;
	return c;
}
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答这个问题。以下是设计一个人民币RMB的代码: ```cpp #include <iostream> using namespace std; class RMB { private: int yuan; // int jiao; // int fen; // public: RMB(int y = 0, int j = 0, int f = 0) : yuan(y), jiao(j), fen(f) {} friend RMB operator+(const RMB& r1, const RMB& r2); friend RMB operator-(const RMB& r1, const RMB& r2); friend ostream& operator<<(ostream& os, const RMB& r); friend istream& operator>>(istream& is, RMB& r); }; RMB operator+(const RMB& r1, const RMB& r2) { int y = r1.yuan + r2.yuan; int j = r1.jiao + r2.jiao; int f = r1.fen + r2.fen; if (f >= 10) { j += f / 10; f %= 10; } if (j >= 10) { y += j / 10; j %= 10; } return RMB(y, j, f); } RMB operator-(const RMB& r1, const RMB& r2) { int y = r1.yuan - r2.yuan; int j = r1.jiao - r2.jiao; int f = r1.fen - r2.fen; if (f < 0) { j -= 1; f += 10; } if (j < 0) { y -= 1; j += 10; } return RMB(y, j, f); } ostream& operator<<(ostream& os, const RMB& r) { os << r.yuan << "" << r.jiao << "" << r.fen << ""; return os; } istream& operator>>(istream& is, RMB& r) { char c; is >> r.yuan >> c >> r.jiao >> c >> r.fen; return is; } int main() { RMB r1(1, 2, 3); RMB r2(4, 5, 6); RMB r3 = r1 + r2; RMB r4 = r1 - r2; cout << r1 << " + " << r2 << " = " << r3 << endl; cout << r1 << " - " << r2 << " = " << r4 << endl; cout << "请输入一个RMB对象:" << endl; cin >> r1; cout << "您输入的RMB对象是:" << r1 << endl; return 0; } ``` 运行结果如下: ``` 123 + 456 = 589 123 - 456 = -367 请输入一个RMB对象: 567 您输入的RMB对象是:567 ``` 希望这个代码可以帮助你解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值