1 #include <iostream> 2 #include <sstream> 3 #include <string> 4 #include <algorithm> 5 #include <vector> 6 using namespace std; 7 8 #define GI ({int _t; scanf("%d", &_t); _t;}) 9 #define FOR(i, a, b) for (int i=a; i<b; i++) 10 #define REP(i, a) FOR(i, 0, a) 11 template<class T> string toString(T n){ostringstream ost;ost<<n;ost.flush();return ost.str();} 12 int toInt(string s){int r=0;istringstream sin(s);sin>>r;return r;} 13 #define DBG(x) cout << #x << "::" << x << endl; 14 #define DBGV(_v) { FOR(_i, 1, _v.size()) { cout << _v[_i] << "\t";} cout << endl;} 15 16 int main() { 17 vector <int> coins; 18 coins.push_back(5); coins.push_back(10); coins.push_back(20); coins.push_back(50); coins.push_back(100); 19 coins.push_back(200); coins.push_back(500); coins.push_back(1000); coins.push_back(2000); coins.push_back(5000); coins.push_back(10000); 20 long double val; 21 while (cin >> val) { 22 if (val == 0.00) break; 23 int value = (int)(val * 100); 24 if (value%5 >= 3) value += 5-(value%5); 25 else if (value%5>0 && value%5<2) value-= (value%5); 26 // cout << value << endl; 27 vector < long long int > flag (value+1, 0); 28 flag[0] = 1; 29 REP(i, coins.size()) { 30 for (int j = 0; j <= value; j+=5) { 31 if (j-coins[i] >= 0 && flag[j-coins[i]] != 0) { 32 flag[j] += flag[j-coins[i]]; 33 } 34 } 35 } 36 //DBGV(flag); 37 double tmp = (double)val; 38 //cout << val << "\t" << flag[value] << endl; 39 printf("%6.2f%17lld\n", tmp, flag[value]); 40 } 41 return 0; 42 }