Project Euler – 問題16

2^15=32768で、その全ての数字の和は3+2+7+6+8=26である。

2の1000乗の全ての数字の和を求めよ。

これも大きな数を扱う問題であるが、Haskellを使用すると非常に簡単に求める ことが出来る。ここでは全ての数字の和を求める関数sumDigitsを以下のように 定義した。showで数値を文字列に変換し、文字列は文字のリストなので digitToIntをmapすることで一桁の数値のリストに変換し、sumで合計を求める。 問題の答えは2^1000にsumDigitsを適用することで求められる。

sumDigits n = sum $ map digitToInt $ show n

euler016 = sumDigits (2 ^ 1000)