题目描述
定义一个人民币类,包括元、角、分三个非负整数属性
请根据以下类声明与主函数,完成以下类实现填空
由于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;
}