--
-- addition of very long integers
--
addRev [] [] 0 = []
addRev la [] c = addRev la [0] c
addRev [] lb c = addRev [0] lb c
addRev
(a:la
) (b:lb
) c
= q :
(addRev la lb p
) where (p
,q
) = divMod (a
+b
+c
) 10
stringToDigits s
= map digitToInt s
digitsToString l
= map intToDigit l
intToDigits n
= map digitToInt
(show n
)digitsToInt s
= read (digitsToString s
)
verifyAdd m n = ((digitsToInt (add (intToDigits m) (intToDigits n))) - (m+n)) == 0
main
= do print (digitsToString
(add
(stringToDigits
"67544539703981792301876431982341329878656543656") (stringToDigits
"923409765450275928347539864398234659"))) print (all (id) [verifyAdd x y
| x
<- [12000..13000], y
<- [7500..8500]])
LS0KLS0gYWRkaXRpb24gb2YgdmVyeSBsb25nIGludGVnZXJzCi0tCgppbXBvcnQgRGF0YS5DaGFyCmltcG9ydCBEYXRhLlN0cmluZwoKYWRkUmV2IFtdIFtdIDAgPSBbXQphZGRSZXYgbGEgW10gYyA9IGFkZFJldiBsYSBbMF0gYwphZGRSZXYgW10gbGIgYyA9IGFkZFJldiBbMF0gbGIgYwphZGRSZXYgKGE6bGEpIChiOmxiKSBjID0gcSA6IChhZGRSZXYgbGEgbGIgcCkgd2hlcmUgKHAscSkgPSBkaXZNb2QgKGErYitjKSAxMAoKYWRkIGxhIGxiID0gcmV2ZXJzZSAoYWRkUmV2IChyZXZlcnNlIGxhKSAocmV2ZXJzZSBsYikgMCkKCnN0cmluZ1RvRGlnaXRzIHMgPSBtYXAgZGlnaXRUb0ludCBzCmRpZ2l0c1RvU3RyaW5nIGwgPSBtYXAgaW50VG9EaWdpdCBsCmludFRvRGlnaXRzIG4gPSBtYXAgZGlnaXRUb0ludCAoc2hvdyBuKQpkaWdpdHNUb0ludCA6OiBbSW50XSAtPiBJbnRlZ2VyCmRpZ2l0c1RvSW50IHMgPSByZWFkIChkaWdpdHNUb1N0cmluZyBzKQoKdmVyaWZ5QWRkIG0gbiA9ICgoZGlnaXRzVG9JbnQgKGFkZCAoaW50VG9EaWdpdHMgbSkgKGludFRvRGlnaXRzIG4pKSkgLSAobStuKSkgPT0gMAoKbWFpbiA9IGRvIHByaW50IChkaWdpdHNUb1N0cmluZyAoYWRkIChzdHJpbmdUb0RpZ2l0cyAiNjc1NDQ1Mzk3MDM5ODE3OTIzMDE4NzY0MzE5ODIzNDEzMjk4Nzg2NTY1NDM2NTYiKSAoc3RyaW5nVG9EaWdpdHMgIjkyMzQwOTc2NTQ1MDI3NTkyODM0NzUzOTg2NDM5ODIzNDY1OSIpKSkKICAgICAgICAgIHByaW50IChhbGwgKGlkKSBbdmVyaWZ5QWRkIHggeSB8IHggPC0gWzEyMDAwLi4xMzAwMF0sIHkgPC0gWzc1MDAuLjg1MDBdXSk=