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 DBGV(_v) { REP(_i, _v.size()) { cout << _v[_i] << "\t";} cout << endl;} 14 15 double nCr(int n, int r) { 16 if (r ==0) return 1; 17 int k = min(r, n-r); 18 double num = 1; 19 for (int i=k; i >= 1 ; i--) { 20 num *= (n-i+1); 21 num /= i; 22 } 23 return (num); 24 } 25 26 int main() { 27 int n, r; 28 while (1) { 29 n = GI; r = GI; 30 if (n==0 && r==0) break; 31 double res = nCr(n, r); 32 printf("%d things taken %d at a time is %.0lf exactly.\n", n, r, res); 33 } 34 return 0; 35 }