打破c#中的货币

时间:2010-04-12 06:47:00

标签: c#

我正试图让这个程序将用户定义的美元金额分解为最少的账单。我不认为我的for循环正在运行,因为如果我在其中放入一条写行线,它在运行时就不会出现。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication13
{
    class Program
    {

        static void Main(string[] args)
        {
            Console.Write("Enter the amount of money: $");
            int totalAmount = Convert.ToInt32(Console.ReadLine());
            calculateNumberOfBills(totalAmount);
        }

        static void calculateNumberOfBills(int totalAmount)
        {

            int[] denominations = { 20, 10, 5, 1 };
            int[] numberOfBills = new int[4];
            for (numberOfBills[0] = 0; totalAmount < 20; numberOfBills[0]++)
            {
                totalAmount = totalAmount - 20;
            }
            for (numberOfBills[1] = 0; totalAmount < 10; numberOfBills[1]++)
            {
                totalAmount = totalAmount - 10;
            }
            for (numberOfBills[2] = 0; totalAmount < 5; numberOfBills[2]++)
            {
                totalAmount = totalAmount - 5;
            }
            for (numberOfBills[3] = 0; totalAmount <= 0; numberOfBills[3]++)
            {
                totalAmount = totalAmount - 1;
            }
            Console.WriteLine("Number of twenties" + numberOfBills[0]);
            Console.WriteLine("Number of tens" + numberOfBills[1]);
            Console.WriteLine("Number of fives" + numberOfBills[2]);
            Console.WriteLine("Number of ones" + numberOfBills[3]);
        }
    }
}

5 个答案:

答案 0 :(得分:2)

看看这个:

for (numberOfBills[0] = 0; totalAmount >= 20; numberOfBills[0]++)
    {
        totalAmount = totalAmount - 20;
    }
    for (numberOfBills[1] = 0; totalAmount >= 10; numberOfBills[1]++)
    {
        totalAmount = totalAmount - 10;
    }
    for (numberOfBills[2] = 0; totalAmount >= 5; numberOfBills[2]++)
    {
        totalAmount = totalAmount - 5;
    }
    for (numberOfBills[3] = 0; totalAmount > 0; numberOfBills[3]++)
    {
        totalAmount = totalAmount - 1;
    }

答案 1 :(得分:2)

这是一个家庭作业问题,对吧?

        for (numberOfBills[0] = 0; totalAmount < 20; numberOfBills[0]++)

制作

        for (numberOfBills[0] = 0; totalAmount >= 20; numberOfBills[0]++)

再试一次:) 中心部分是循环运行的条件。

答案 2 :(得分:1)

对不起,此时这“不是一个真正的问题”,很可能被标记为家庭作业。

您的“小于”比较应更改为“大于”比较,您最好使用您的解决方案。现在发生的是一个整数溢出,最终导致你的第一个for循环,这个循环无限循环直到那时才会中断。

有更简单的方法可以解决您的问题,尝试使用单循环和模运算符)。

答案 3 :(得分:0)

在“for”循环中,你有逆条件=&gt; totalAmount&lt; 20意味着它执行循环而totalAmount 小于大于20 - 这与你想要的相反。

将其更改为

for(...;totalAmount > 20; ...)

答案 4 :(得分:0)

试试这个,少一些代码

    int amt = 73;

    Dictionary<int, int> dic = new Dictionary<int, int>() {{20,0},{10,0},{5,0},{1,0}};
    int[] keys =new  int[dic.Count];
    dic.Keys.CopyTo(keys, 0);

    foreach (int i in  keys)
    {            
        if (amt >= i)
        {
            dic[i] = amt / i;
            amt = amt % i;
        }
    }