Project Euler #8: Largest product in a series

  • + 0 comments

    Haskell

    import Control.Applicative
    import Control.Monad
    import System.IO
    import Data.Char(digitToInt)
    
    slice :: Int -> Int -> [a] -> [a]
    slice start end xs = take (end - start) (drop start xs)
    
    strMult :: [Char] -> Int
    strMult [chr] = digitToInt chr
    strMult (chr:str) = (digitToInt chr) * (strMult str)  
    
    subMult :: [Char] -> Int -> Int -> [Int]
    subMult num start end 
        | end == (length num) - 1 = [strMult (slice start end num)]
        | otherwise = (strMult (slice start end num)):(subMult num (start+1) (end+1))
    
    main :: IO ()
    main = do
        t_temp <- getLine
        let t = read t_temp :: Int
        forM_ [1..t] $ \a0  -> do
            n_temp <- getLine
            let n_t = words n_temp
            let n = read $ n_t!!0 :: Int
            let k = read $ n_t!!1 :: Int
    '
            num <- getLine
            let multList = subMult num 0 k
            print (maximum multList)