In your calculations, you should be using the 'remainingAmount' to calculate each time, not using the 'amount' which is always what was originally input.

If you had stepped through the code by hand, on paper, you would spot the problem in a few minutes.

However, you can simplify the code by re-arranging it like this:

...
amount = Integer.parseInt(input);
remainingAmount = amount % 100;
hundreds = (amount - remainingAmount) / 100;
amount = remainingAmount;
remainingAmount = amount % 50;
fifties = (amount - remainingAmount) / 50;
amount = remainingAmount;
remainingAmount = amount % 20;
twenties = (amount - remainingAmount) / 20;
...
etc.

Notice that doing it this way, the only difference each time is the units number, which suggests you could abstract the calculation into a single method, making things even simpler. When you learn about the 'static' keyword, you could do something like this:

static int remainingAmount;
static int amount;
...
{
...
hundreds = getUnits(Integer.parseInt(input), 100);
fifties = getUnits(remainingAmount, 50);
twenties = getUnits(remainingAmount, 20);
tens = getUnits(remainingAmount, 10);
fives = getUnits(remainingAmount, 5);
twos = getUnits(remainingAmount, 2);
...
}
// calculate the units
static int getUnits(int anAmount, int unitValue) {
amount = anAmount;
remainingAmount = amount % unitValue;
return (amount - remainingAmount)/unitValue;
}