更有效的重新模拟模数的方法?

时间:2015-10-21 10:19:57

标签: c# c#-4.0 c#-3.0

我最初尝试使用modulo但是没有按预期工作

它帮我回复了价值(我的老师和我都无法理解)

示例:

 Uw krijgt 200 x 2 euro terug
 Uw Krijgt 100 x 1 euro terug
 Uw krijgt 50 x 50 cent terug
 Etc...

该怎么做

我需要制作一个程序来计算你得到多少改变。

输入5

费用:2

输出:1x 2欧元,1x 1欧元,0 x 50美分,......

我的代码

int Prijs, Ingegooid;
    int Cent1, Cent2, Cent5, Cent10, Cent20, Cent50, Euro, Euro2, Wisselgeld;





    private void btnCola_Click(object sender, RoutedEventArgs e)
    {

        Cent10 = 10;
        Cent20 = 20;
        Cent50 = 50;
        Euro = 100;
        Euro2 = 200;

        Ingegooid = Convert.ToInt32(txbIngegooid.Text);

        Prijs = 190;

        Wisselgeld = (Ingegooid * 100 - Prijs);

        Euro2 = Wisselgeld / Euro2;
        MessageBox.Show("Uw krijgt " + Euro2 + " aantal 2 euro stukken terug.");
        Euro = (Wisselgeld-Euro2*200) / Euro;
        MessageBox.Show("Uw krijgt " + Euro + " aantal 1 euro stukken terug.");
        Cent50 = (Wisselgeld-Euro2*200-Euro*100) / Cent50;
        MessageBox.Show("Uw krijgt " + Cent50 + " aantal 50 cent stukken terug.");
        Cent20 = (Wisselgeld-Euro2*200-Euro*100-Cent50*50) / Cent20;
        MessageBox.Show("Uw krijgt " + Cent20 + " aantal 20 cent stukken terug.");
        Cent10 = (Wisselgeld-Euro2*200-Euro*100-Cent50*50-Cent20*20) / Cent10;


    }

1 个答案:

答案 0 :(得分:1)

您不一定需要模数。 在这种情况下,它实际上可能会产生误导。 示例:90美分: 1种可能的解决方法:

1 * 50c + 2 * 20c。 另一种方式是: 4 * 20c + 1 * 10c。

如果你想尽可能使用最大的硬币你可以这样做,如果你真的想:     10centAmmount =(更改%50)%20; 在这种情况下     10centAmmount =(90%50)%20; (90%50 = 40; 40%20 = 0 - >你不需要任何10美分硬币) 从最大的硬币到最小的硬币工作在这里更有意义。 我还建议减去你已经使用过的硬币。由于代码变得“不那么拥挤”

Euro2 = change/200;
change -= Euro2 * 200
Euro1 = change/100
change -= Euro1 * 100
...

模数的用例是确定一个数字是否可以被任何其他数字分割。 例如:

if (a % 4 == 0) {
    print "a can be devided by 4";

此外,代码有点令人困惑。您使用Euro2作为欧元硬币的分数,但后来您用它来计算2欧元硬币的数量。如果您使用不同的变量,那将会有点混乱。您还可以将常量用于您永远不需要更改的值,例如2欧元硬币的分数。

希望这会有所帮助。