Check code out-tired today

I gave this problem to return the change back from an input. However, this code a few students wrote produces in correct results. It seems to have an "off by one error". This is for a C exam I gave. I cannot see the error- it has been a long day. Comments would help

Code:

` #include <stdio.h>`

void change (float total, int *dlrs, int *quart, int *nick,

int *hlfdoll, int *dimes, int *cents);

int main()

{

float total;

int dollar, quarter, nickel, dime, cent, halfdollar = 0;

printf("Please enter an amount in change:\n");

scanf("%f",&total);

change(total, &dollar,&quarter,&nickel,&halfdollar,&dime,¢);

printf("The breakdown for $%.2f is as follows: \n\n", total);

printf ("Dollars %d\n", dollar);

printf ("Half Dollars %d\n", halfdollar);

printf ("Quarters %d\n", quarter);

printf ("Dimes %d\n", dime);

printf ("Nickels %d\n", nickel);

printf ("Pennies %d\n", cent);

return 0;

}

void change (float total, int *dlrs, int *quart, int *nick,

int *hlfdoll, int *dimes, int *cents)

{

int calc;

calc = (int)(total * 100.0);

*dlrs = calc / 100;

calc -= (*dlrs * 100);

*hlfdoll = calc / 50;

calc -= (*hlfdoll * 50);

*quart = calc / 25;

calc -= (*quart * 25);

*dimes = calc / 10;

calc -= (*dimes * 10);

*nick = calc / 5;

calc -= (*nick * 5);

*cents = calc;

return;

}