有目录~
C++ 20’/20’
分析:
把付的钱看做一个对象,各个部分(包括Galleon、Sickle、Knut)都是“钱”的属性。
因为输入的时候就要求以“Galleon.Sickle.Knut”的格式进行输入,所以立马想到了重载流插入运算符、流提取运算符。
重载完上述运算符之后再来编写主函数部分就方便多了。
编写主函数时,遇到了转化的问题(大单位的数字小单位的数字之间的转化),每次遇到这种问题,我都用的是固定的方式:统一将大单位的数字转化为小单位的数字,差值(或求和等其他运算)计算完毕后,再将小单位的数转为大单位的数。
#include <iostream>
using namespace std;
class Money
{
friend istream& operator>>(istream&, Money&);
friend ostream& operator<<(ostream&, const Money&);
public:
int gal;
int sic;
int knu;
int totalToKnut;
};
istream& operator>>(istream& input, Money& m)
{
input >> m.gal;
input.ignore();
input >> m.sic;
input.ignore();
input >> m.knu;
return input;
}
ostream& operator<<(ostream& output, const Money& m)
{
cout << m.gal << "." << m.sic << "." << m.knu;
return output;
}
int main()
{
Money p, a,c; // c:零钱
cin >> p >> a;
p.totalToKnut = p.gal * 17 * 29 + p.sic * 29 + p.knu;
a.totalToKnut = a.gal * 17 * 29 + a.sic * 29 + a.knu;
c.totalToKnut = a.totalToKnut - p.totalToKnut;
c.gal = c.totalToKnut / 17 / 29;
c.sic = (c.totalToKnut - c.gal * 17 * 29) / 29;
c.knu = c.totalToKnut - c.gal * 17 * 29 - c.sic * 29;
// 防止出现:-3.-2.-1
c.sic = abs(c.sic);
c.knu = abs(c.knu);
cout << c;
return 0;
}
C 20’/20
#include<stdio.h>
typedef struct
{
int g, s, k;
int Knut;//turn to Knuts
}PAY;
PAY p, a, changes;
int main()
{
int t;
scanf("%d.%d.%d %d.%d.%d", &p.g, &p.s, &p.k, &a.g, &a.s, &a.k);
p.Knut = p.g * 493 + p.s * 29 + p.k;
a.Knut = a.g * 493 + a.s * 29 + a.k;
changes.g = 0;
changes.s = 0;
changes.k = 0;
if (a.Knut == p.Knut)
{
printf("0.0.0");
}
else
{
if (a.Knut < p.Knut)
{
printf("-");
t = a.Knut;
a.Knut = p.Knut;
p.Knut = t;
}
changes.Knut = a.Knut - p.Knut;
if (changes.Knut / 493.0 >= 1.0)
{
changes.g = changes.Knut / 493;
changes.Knut = changes.Knut % 493;
}
printf("%d.",changes.g);
if (changes.Knut / 29.0 >= 1.0)
{
changes.s = changes.Knut / 29;
changes.Knut = changes.Knut % 29;
}
printf("%d.",changes.s);
printf("%d",changes.Knut);
}
return 0;
}