打破一个数字到纸币

时间:2012-10-13 12:33:25

标签: java

在大学里给出了以下练习,但最后一点不能理解。你如何将答案归结为音符。如果答案不能被50等分开怎么办? 我试过过模数和模数数学课......

  

当地街角店的老板Cashman先生遇到了麻烦   他的员工给出了错误的改变。为了解决这个问题,他已经做好了准备   你创建一个程序,允许工作人员进入   购物的总成本和客户支付的金额。该   程序应该计算并输出多少€50,€20,€10,€5   注意事项,以及为客户提供多少2欧元和1欧元的硬币作为变更。   Cashman先生拒绝处理小硬币,所以尽管工作人员   会员输入他所购物的购物成本的十进制值   所有的价格都降到最接近的欧元,并没有打扰   50c,20c,10c,5c,2c或1c硬币。

     

按照Cashmans先生的说法编写,编译和测试应用程序   要求并将类保存为MakingChange.java

2 个答案:

答案 0 :(得分:1)

你有模数的正确方法,但也需要整数除法。我们来看看价值€164。

如果你将164除以50(用整数除法),你得到3.所以需要3€50注释。

如果您计算出164 modulo 50,那么最终会得到14,这是您取出这三张50欧元纸币后剩余的价值。那是你用下注20欧元的下一次迭代的起点。

然后你就继续这样做,直到你用完所有的货币类型。

换句话说,伪代码看起来像:

def workOutNotes (numEuros):
    left = numEuros
    //                               for 164:      numXXs   left
    num50s = int (left / 50); left = left % 50; //      3     14
    num20s = int (left / 20); left = left % 20; //      0     14
    num10s = int (left / 10); left = left % 10; //      1      4
    num5s  = int (left /  5); left = left %  5; //      0      4
    num2s  = int (left /  2); left = left %  2; //      2      0
    num1s  = left;                              //      0

答案 1 :(得分:0)

我为你准备了一段C#代码,基本上将这些代码分解为越来越小的账单:

int changeAmount = 1300;
var bills = new int[] { 200, 100, 50, 20, 10, 5 };

var changeBills = new Dictionary<int, int>();
foreach(int bill in bills)
{
    changeBills.Add(bill, changeAmount / bill);
    changeAmount = changeAmount % bill;
}

代码会削减更改以适应账单,而不是购物金额。但我认为让你添加这个逻辑是公平的。