Salem probably hit it on the head -- in binary, 91/100 is an infinite, repeating decimal. So you probably have rounding error causing this.
The alternative to Salem's string parsing idea is to do this:
Code:
float t = 0;
int total = 0;
int data[6] = { 0, 0, 0, 0, 0, 0 };
cout << "\nHow much money? $";
cin >> t;
total = (int)(t *100 +0.5);
And then use it from there. In this way, you read in a float, multiply by 100 and round to the nearest integer -- (int)(f + 0.5) will return f rounded to the nearest integer. This should work just fine, because floats should have enough precision that you're not going to be off by more than 0.5 cents.
Your problem is that the computer probably thinks you have something like 190.9999999 cents, not 191 cents exactly, so the 0.99999999 cents doesn't get counted as the last penny.