21 lines
504 B
Haskell
21 lines
504 B
Haskell
import Data.List (transpose, inits)
|
|
import Data.Char (digitToInt)
|
|
|
|
longmult :: Integer -> Integer -> Integer
|
|
longmult x y = foldl1 ((+) . (10 *)) (polymul (digits x) (digits y))
|
|
|
|
polymul :: [Integer] -> [Integer] -> [Integer]
|
|
polymul xs ys =
|
|
sum <$>
|
|
transpose
|
|
(zipWith
|
|
(<>)
|
|
(inits $ repeat 0)
|
|
((\f x -> fmap ((<$> x) . f)) (*) xs ys))
|
|
|
|
digits :: Integer -> [Integer]
|
|
digits = fmap (fromIntegral . digitToInt) . show
|
|
|
|
main :: IO ()
|
|
main = print $ (2 ^ 64) `longmult` (2 ^ 64)
|