« Project Euler : Problem 15 ~ 組み合わせ | トップページ | Haskell でいろいろな「ソート」を考えてみた »

2010年2月21日 (日)

Project Euler : Problem 16 ~ 整数のリスト化

 問題はこちらをご覧ください。

 

 方針としては「2 の 1000乗を計算して、それをリストに変換して合計を出す」ということになると思います。
 それでは、どうやって整数をリストに変換するか?

 十進法限定ならば、かなり簡単にできます。

import Data.Char (digitToInt) -- 整数をリストに変換 dexToList :: Integral a => a -> [Int] dexToList = (map digitToInt) . show problem016 :: Integral a => a -> Int problem016 = sum . dexToList main = print $ problem016 (2 ^ 1000)

 これだけだと面白くないので、基数を指定して整数をリストに変換する関数を考えてみました。

-- 整数をリストに変換 -- ex : intToList 10 123 => [1,2,3] -- ex : intToList 2 123 => [1,1,1,1,0,1,1] intToList :: Integral a => a -> a -> [a] intToList radix n = iter n [] where iter n prod | n < radix = n : prod | otherwise = iter q (r : prod) where (q, r) = quotRem n radix problem016 :: Integral a => a -> a problem016 = sum . (intToList 10) main = print $ problem016 (2 ^ 1000)

« Project Euler : Problem 15 ~ 組み合わせ | トップページ | Haskell でいろいろな「ソート」を考えてみた »

Haskell」カテゴリの記事

Project Euler」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/112020/47625616

この記事へのトラックバック一覧です: Project Euler : Problem 16 ~ 整数のリスト化:

« Project Euler : Problem 15 ~ 組み合わせ | トップページ | Haskell でいろいろな「ソート」を考えてみた »

2016年7月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
フォト

最近のトラックバック

無料ブログはココログ