http://projecteuler.net/index.php?section=problems&id=16
Problem 13で作った多倍長整数クラスを使えば簡単。足し算を繰り返すだけ。その後各桁の数字をatで拾ってくる。
#include <iostream> #include "itertools.h" #include "longint.h" using namespace std; using namespace itertools; int main() { const int N = 1000; longint n = last(take(N, iterate( [] (longint x) { return x + x; }, longint(2)))); cout << sum(map([&n] (int k) { return n.at(k); }, range<>(n.length()))) << endl; }