题目描述
定义一个人民币类,包括元、角、分三个非负整数属性
请根据以下类声明与主函数,完成以下类实现填空
由于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
1元2角3分 <= 4元5角6分 1元2角3分 4元5角6分 = 5元7角9分 7元8角0分 > 6元5角4分 7元8角0分 6元5角4分 = 14元3角4分
思路分析
首先来解决一个平常的问题,就是类声明中没有写默认构造函数,只有带参数的构造函数,而主函数中直接定义了没有带参数的类对象,所以需要把默认构造函数和带参数构造函数写成一个缺省的带参数构造函数。
此外就需要记得进位的问题。
AC代码
代码语言:javascript复制RMB::RMB(double money=0)
{
money = 0.005;
money *= 100;
yuan = (int)money / 100;
jiao = (int)money % 100 / 10;
fen = (int)money % 10;
}
RMB::RMB(int y,int j,int f):yuan(y),jiao(j),fen(f){}
istream& operator >>(istream& in, RMB& rmb)
{
in >> rmb.yuan >> rmb.jiao >> rmb.fen;
return in;
}
ostream& operator <<(ostream& out, RMB& rmb)
{
out << rmb.yuan << "元" << rmb.jiao << "角" << rmb.fen << "分";
return out;
}
bool RMB:: operator > (RMB& rmb)
{
if (yuan > rmb.yuan)
return 1;
if (yuan < rmb.yuan)
return 0;
if (jiao > rmb.jiao)
return 1;
if (jiao < rmb.jiao)
return 0;
if (fen > rmb.fen)
return 1;
return 0;
}
RMB operator (RMB& a, RMB& b)
{
RMB c(a.yuan b.yuan, a.jiao b.jiao, a.fen b.fen);
if (c.fen > 9)
{
c.jiao ;
c.fen = c.fen % 10;
}
if (c.jiao > 9)
{
c.yuan ;
c.jiao = c.jiao % 10;
}
return c;
}