{- Да се напише функцията за събиране на полиноми от контролното -}
import Char

sumPolin :: [(Int, Int)] -> [(Int, Int)] -> [(Int, Int)]
sumPolin [] l2 = l2
sumPolin l1 [] = l1
sumPolin ((k1, st1) : t1) ((k2, st2) : t2)
|st1 == st2 = (k1 + k2, st1) : (sumPolin t1 t2)
|st1 < st2 = (k2, st2) : (sumPolin ((k1, st1) : t1) t2)
|otherwise = (k1, st1) : (sumPolin t1 ((k2, st2) : t2))

{- Да се напише функция, която събира "големи числа" представени като списъци. -}
sum2Numbers :: [Char] -> [Char] -> Int -> [Char]
sum2Numbers l1 l2 naUm
|length l1 == 0 && naUm == 0 = ""
|length l1 == 0 = intToDigit naUm : ""
|otherwise = intToDigit (sum1 `mod` 10) : (sum2Numbers (tail l1) (tail l2) (sum1 `div` 10))
where
sum1 = n1 + n2 + naUm
n1 = digitToInt (head l1)
n2 = digitToInt (head l2)

addZeros :: [Char] -> Int -> [Char]
addZeros list n = replicate n '0' ++ list

sumBigNumbers :: [Char] -> [Char] -> [Char]
sumBigNumbers l1 l2 = reverse (sum2Numbers rl1 rl2 0)
where
maxL = max (length l1) (length l2)
rl1 = reverse (addZeros l1 (maxL - (length l1)))
rl2 = reverse (addZeros l2 (maxL - (length l2)))
Last modified: Saturday, 12 November 2011, 5:38 PM