// Template Metaprogramming version by Martin Ettl #include #include typedef unsigned long long int T; template void For(T &sum, T &x, const T &BASE) { const double z(std::pow(BASE,i)); const T t = x/z; sum += t; x -= t*z; For(sum,x,BASE); } template <> void For(T &, T &, const T &){} template T SumDigits() { T sum(0); T x(digits); const T end(log(digits)/log(BASE)); For(sum,x,BASE); return x+sum; } int main() { std::cout << SumDigits() << ' ' << SumDigits() << ' ' << SumDigits() << ' ' << SumDigits() << ' ' << SumDigits() << std::endl; return 0; }