Project Euler 16

http://projecteuler.net/index.php?section=problems&id=16


Problem 13で作った多倍長整数クラスを使えば簡単。足し算を繰り返すだけ。その後各桁の数字をatで拾ってくる。

itertools.h

#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;
}