I’m working on the optional activity at the end of the ‘C# moneymaker’ problem, where you enter an amount and it returns the minimum number of coins needed to get that amount.

Here is the prompt:

“Use another currency that has different coin amounts. For example, the US uses 1, 5, 10, and 25 cent coins called pennies, nickels, dimes, and quarters, respectively.”

Here is my code:
{
Console.WriteLine(“Welcome to Money Maker!”);

//asks user for amount to convert
Console.WriteLine("What amount would you like to check? Please type a number using number keys, thank you!");
//collects use input and converts to number
string amountentered = Console.ReadLine();
double amountConverted = Convert.ToDouble(amountentered);
amountConverted = Math.Floor(amountConverted);
//tells user what you are about to do
Console.WriteLine($"{amountConverted} is equal to...");
//defines variable of gold and silver coins
int quarterValue = 25;
int dimeValue = 10;
int nickleValue = 5;
//finds maximum number of quarters that fit into amount entered by user
double quarterDivide = Math.Floor(amountConverted / quarterValue);
//find remaining amount
double leftOver = (amountConverted % quarterValue);
//finds maximum number of dimes that fit into amount entered by user
double dimeDivide = Math.Floor(leftOver / dimeValue);
//find remaining amount
leftOver = (dimeDivide % dimeValue);
//finds maximum number of nickels that fit into amount entered by user
double nickleDivide = Math.Floor(leftOver / nickleValue);
//find remaining amount for pennies
leftOver = (nickleDivide % nickleValue);
//returns answer to user
Console.WriteLine($"Quarters: {quarterDivide}.\nDimes: {dimeDivide}.\nNickels:{nickleDivide}.\nPennies:{leftOver}.");

}

The problem is, it returns quarters and dimes, but doesn’t return any nickels or pennies. Even when I enter a total like 249, it returns:

The problem you have is that, when calculating dimeDivide and nickleDivide, you are trying to find the remainder after dividing the calculated number of either dimes or nickels with dime/nickel value.

It helps if you take it sequentially.

249 is input.

The quarter value 25 divides into 249 9 times exactly with 24 remaining. This gives us a result of 9 quarters and 24 left over.

The dime value 10 divides into the remainder, 24 twice with 4 remaining. This gives us a result of 2 dimes with 4 remaining. However when you calculate the remainder you use the dime result instead of what is left over (4) meaning that you calculate the left over to be 2 instead of 4.

The remainder, incorrectly calculated above, 2 divides 0 times into the nickel value of 5 with a remainder of two. However you use the nickel result of 0. 0 % anything = 0.

What you want to do is instead use the working value of left over to mod against the nickel/dime value.

Refactoring only slightly you would have:

//asks user for amount to convert
Console.WriteLine("What amount would you like to check? Please type a number using number keys, thank you!");
//collects use input and converts to number
string userInput = Console.ReadLine();
double workingAmount = Math.Floor(Convert.ToDouble(userInput));
//tells user what you are about to do
Console.WriteLine($"{workingAmount} is equal to...");
//defines variable of gold and silver coins
int quarterValue = 25;
int dimeValue = 10;
int nickleValue = 5;
//finds maximum number of quarters that fit into amount entered by user
double quarterDivide = Math.Floor(workingAmount / quarterValue);
//find remaining amount
workingAmount = (workingAmount % quarterValue);
//finds maximum number of dimes that fit into amount entered by user
double dimeDivide = Math.Floor(workingAmount / dimeValue);
//find remaining amount
workingAmount = (workingAmount % dimeValue);
//finds maximum number of nickels that fit into amount entered by user
double nickleDivide = Math.Floor(workingAmount / nickleValue);
//find remaining amount for pennies
workingAmount = (workingAmount % nickleValue);
//returns answer to user
Console.WriteLine($"Quarters: {quarterDivide}.\nDimes: {dimeDivide}.\nNickels:{nickleDivide}.\nPennies:{workingAmount}.");

This gives the right output.

One thing I would recommend is that, if you want to try and convert a user inputted value to a double, you wrap it in a try catch block. At the moment if the user inputs a value such as “Ten” the program will throw an error. You can learn more about that here: Exception-handling statements - throw and try, catch, finally - C# | Microsoft Learn but it might be beyond the scope of your journey at this time - you can always take a look later when you have learned more about C#!

Sometimes issues like this can be pretty tricky to spot. I was very puzzled to begin with. It wasn’t until I copied your code into visual studio and debugged it I could see what was happening. Codecademy doesn’t have debugging in it but you can always try running the code in a local console project with visual studio to help spot bugs like this.