
Assignment 05
Task
To review the concepts learned so far, write a program that asks the user for a monetary amount and then computes the smallest number of US bills and coins that equal that amount.
Textbook: Chapters 1 and 2 (review)
Hints
 Read in the total amount as a
double using a Scanner.
 Convert this to two ints: the total amount in bills and the total amount in coins. The bills amount can be achieved by simply casting the total amount to an
int .
 The coins amount is a little trickier, since floating point numbers are not always stored exactly and you may get some strange rounding if you just try to take the remainder of dividing by 1 (
amount % 1 ) or otherwise work with values less than 1. Instead, I recommend you compute the whole number of coins by using something like this:
int coins = (int) Math.rint(amount * 100 % 100);
Or, once you know the bills amount, you could instead do something like this:
int coins = (int) Math.rint((amount  bills) * 100);
In either case, coins would now hold the total number of whole cents (0 to 99), rather than the decimal part of a dollar. (Update: The Math.rint() is needed to handle all cases properly. See FAQ below.)
 (At this point, temporarily print out the bills and coins values to make sure you've got it right so far. Compile, run, and test your program a few times at this point.)
 Use a combination of /, %, and additional variables to compute the number of each specific bill and coin needed.
Output
Some sample output (again, user input is shown here in green):
Enter a US dollar amount: 52.67
$52.67 in the fewest number of bills and coins:
2 x $20 bills
1 x $10 bills
0 x $5 bills
2 x $1 bills
2 quarters
1 dimes
1 nickels
2 pennies
Please note the following requirements for your output:
 Each kind of bill or coin should be listed on its own line. (Each kind of bill or coin should be displayed every time, even if not used to form this particular amount.)
 Coins should be listed by name: quarter, dime, nickel, penny. (Plural word forms are okay.)
 Bills can be listed either by name (twenty, ten, five, one), by value ($20, $10, $5, or $1), or by president depicted. (Again, plural form is okay.)
 Please use only the bills and coins used in the sample output above. That means, no $100 or $50 or $2 bills, and no dollar coins or halfdollars. (Those are too rare in general circulation; cashiers often look at you distrustfully if you try to use them.)
What to Submit
Upload your UsernameA05.java file to Tamarin.
Grading [5 points]
 1  Compiles
 Your program compiles successfully (no errors)
 1  Input
 You read in a total decimal amount from the user.
 1.5  Output
 You print your output according to the above requirements.
 1.5  Correctness
 The given results are correct.
FAQs
 Is there an example of something similar to this?
 See SecondsConverter.java
 I'm losing a penny somewhere (or getting other strange rounding errors).
 The
float and double data types do not always store numbers exactly, especially after a math operation. There are other options available to do more accurate floatingpoint math, but they are a bit beyond your ability to use at this point. (See float and double on this page in the Java Tutorial for a bit more.)
Instead, you can just round the result to the nearest whole cent. The Math.rint() method takes the double amount you want to round; it returns a double , so you still need to cast the result to an int .
As suggested above, I'd do something like the following:
int bills = (int) amount; //number of whole dollars
int coins = (int) Math.rint((amount  bills) * 100); //number of cents
Once you've done this, you don't need to worry about rounding or Math.rint() any more, since you're working with bills and coins , which are int s.
However, if you're using double variables throughout, you may need to use Math.rint() more often.
$158.98 is a good test amount to see if your program is working correctly.
