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; }