我正在创建一个基于3种硬币(金,银和铜)的货币系统,它的工作原理是100个铜币转换成1个银币,100个银币转换成1个金币。
我创建了一个像这样的结构体
struct Money
{
Money();
Money(int copper, int silver, int gold);
Money(Money& m);
Money operator + (Money const& obj);
Money operator - (Money const& obj);
void operator += (Money const& obj);
void operator -= (Money const& obj);
void Balance();
void Print();
int c, s, g;
};
但是问题来自于Balance()方法。这种方法通过数学运算将所有的铜转化为银,银转化为金。
我做了这个,但我正在寻找一个更好的解决方案,如果有人能找到它。我认为我的方法的性能很差。
void Money::Balance()
{
if (c > 99) { s += c / 100; c = c % 100; }
if (s > 99) { g += s / 100; s = s % 100; }
if (c < 0 && s >= 0 && g > 0) {
(c += ((c / 101) + 1) * 100);
s -= (c / -101) + 1;
}
if (s < 0 && g > 0) {
(s += ((s / 101) +1) * 100);
g -= (c / -101) + 1;
}
}
编辑:最后2个if-block用于将负货币转换为(50g 10s -1c) (50g 9s - 99c),并且在第一种货币类型中只有负货币。没有(50g -9s -2c)
编辑:我检查了有一个bug,如果你有g>0, s = 0, c <</p>
谢谢你的回答<3
我试着把100个铜换成1个银,100个银换成100个金。我认为我的解决方案是有效的,但性能很差。
删除代码的最后一部分,它可以正常工作:
void Money::Balance()
{
// Convert excess copper coins to silver coins
s += c / 100;
c %= 100;
// Convert excess silver coins to gold coins
g += s / 100;
s %= 100;
}