rendered paste body#include <iostream>#include <vector>#include <algorithm>using namespace std;// Function object (a.k.a functor)struct fact{ int operator ()(int i) /*const*/ { if(i > cache_.size()) cache_.resize(i); if (i == 0) return cache_[i] = 1; else return cache_[i-1] = i * operator()(i-1); } vector<int> cache_;};ostream& operator <<(ostream& os, vector<int> const& i){ for ( vector<int>::const_iterator j=begin(i); j != end(i); ++j) { os << *j << ','; } return os;}template <typename InIter, typename OutIter, typename F>OutIter mytransform(InIter beg, InIter end, OutIter result, F f){ for (; beg != end; ++beg) { *result = f(*beg); ++result; } return result;}int main(){ vector<int> v; int i; while (cin >> i) v.push_back(i); mytransform( begin(v), end(v), begin(v), fact() ); cout << v << endl;}