F. 【程序填空】人民币运算(输入输出重载)

该文章描述了一个编程题目,要求定义一个人民币类,包含元、角、分三个非负整数属性。由于OJ编译器的精度问题,建议在处理double转int时加0.005。文章提供了类声明、主函数及相关的输入输出示例,包括金额的比较和相加操作。
摘要由CSDN通过智能技术生成

题目描述

定义一个人民币类,包括元、角、分三个非负整数属性

请根据以下类声明与主函数,完成以下类实现填空

由于OJ编译器对double强制类型转换成int的处理精度有偏差,建议加0.005处理(例如数据1.38,由于误差,在内存中的存储值为1.379999)

输入

第一行输入t,表示有t个测试实例

每个实例包含两行输入:

第1行输入一个浮点数,表示以元为单位的人民币金额,例如输入1.23,对应人民币对象为1元2角3分

第2行输入三个整数,表示以元、角、分为参数的人民币金额,例如输入4 5 6,对应人民币对象为4元5角6分

输出

每个实例输出两行:

第1行输出两个人民币金额比较的结果,具体看样例

第2行输出两个人民币金额相加的结果,具体看样例

样例查看模式 

正常显示查看格式

输入样例1 <-复制

2
1.23
4 5 6
7.8
6 5 4

输出样例1

1yuan2jiao3fen <= 4yuan5jiao6fen
1yuan2jiao3fen + 4yuan5jiao6fen = 5yuan7jiao9fen
7yuan8jiao0fen > 6yuan5jiao4fen
7yuan8jiao0fen + 6yuan5jiao4fen = 14yuan3jiao4fen

#include <iostream>
using namespace std;

class RMB;
ostream & operator <<(ostream &, RMB &);
istream & operator >>(istream &, RMB &);

class RMB{
protected:
	int yuan, jiao, fen;
public:
	RMB(double a=0.0);
	RMB (int, int, int); 
	bool operator > (RMB &);
	friend ostream & operator <<(ostream &, RMB&); //一行输出,无换行
	friend istream & operator >>(istream &, RMB&);
	friend RMB operator +(RMB&, RMB&);
};
//完成以下类定义的填空
    RMB::RMB(double a){
        a=a+0.005;
        int b=int(100*a);
        yuan=b/100;
        jiao=(b/10)%10;
        fen=b%10;
    }
    RMB::RMB(int a,int b,int c){
        fen=c%10;
        jiao=b%10+(c/10)%10;
        yuan=a+b/10+c/100;
    }
    bool RMB::operator > (RMB &p){
        int sum1,sum2;
        sum1=100*yuan+10*jiao+fen;
        sum2=100*p.yuan+10*p.jiao+p.fen;
        return sum1>sum2;
    }
    ostream & operator <<(ostream &output, RMB&a){
        output<<a.yuan<<"yuan"<<a.jiao<<"jiao"<<a.fen<<"fen";
        return output;
    }
    istream & operator >>(istream &input, RMB&a){
        input>>a.yuan>>a.jiao>>a.fen;
        return input;
    }
    RMB operator +(RMB& a,RMB& b){
        RMB fin(a.yuan+b.yuan,a.jiao+b.jiao,a.fen+b.fen);
        return fin;
    }
//主函数
int main()
{	int t;
	double val_yuan; 
	cin>>t;
	while (t--)
	{	cin>>val_yuan;	//输入一个浮点数,例如1.23 
		RMB r1(val_yuan); //例如上一行输入1.23,则生成对象r1是1元2角3分 
		RMB r2;
		cin>>r2;	//输入一行三个整数参数,按元、角、分输入 

		if (r1>r2) 		cout<<r1<<" > "<<r2<<endl;
		else 			cout<<r1<<" <= "<<r2<<endl;
		RMB r3 =r1+r2;
		cout<<r1<<" + "<<r2<<" = "<<r3<<endl;
	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值