My coin/money change code works when there can be an exact change each time, i.e. when the 1 cent option is available. However, when the change options are only $10, $5, $1, 25 cents and 10 cents, it does not give me what I want for instance, I wanted to get change for $237.80, I was expecting to get:

23 10's, one 5, two 1's and 8 dimes. However, the code below is giving me 23 10's, one 5, two 1's and 3 quarters (there is no option left for the 5 remaining cents).

Any idea on how to fix it?

using namespace std;

void change(double cents, int a[]);

int main()
    double Dollars;
    double cents;
   // int a[]={25,10,5,1}; denominations of coins, could have been any numbers in DECREASING order.
    int a[]={1000,500,100,25,10};
    cout<<"Please enter an amount in the format $x.xx: ";
    cin>> Dollars;
    cout<<endl<<Dollars<<" dollars is equal to "<<cents<<" cents"<<endl<<endl;
    change(cents, a);
std::cout << "Press ENTER to continue...";
std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );  

void change(double cents, int a[]){
     int money=cents;
     double coins[4];
     cout<<"The change is  respectively [";
     for(int i=0;i<5;i++){
             double remainder=money%a[i];
             cout<<coins[i]<<" ";
             //cout<<"] quarters, dimes, nickels and pennies."<<endl<<endl; 
             cout<<"] 10's, 5's, 1's, quarters and dimes."<<endl<<endl;