Advertisement
Guest User

Untitled

a guest
Oct 25th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.83 KB | None | 0 0
  1. // Learn more about F# at http://fsharp.net
  2. // See the 'F# Tutorial' project for more help.
  3.  
  4. let read(str: System.String) =
  5.     let array = str.ToCharArray() |> List.ofArray |> List.rev |> List.map(fun(c:char) -> (byte c)-(byte '0'))
  6.     array
  7.    
  8.  
  9. let rec addLists(a: List<byte>, b: List<byte>) =
  10.         match a, b with
  11.         | _,[] -> a
  12.         | [],_ -> b
  13.         | heada::taila, headb::tailb -> (byte(heada) + byte(headb))::addLists(taila,tailb)
  14.        
  15.  
  16. let rec normalize(result: List<byte>, p: byte) =
  17.     match result  with
  18.     | head::tail -> let w = head+p
  19.                     (w%10uy)::normalize(tail, (w/10uy))
  20.     | [] -> if p > 0uy then (p%10uy)::normalize([],(p/10uy))
  21.             else []
  22.  
  23. let add(a: List<byte>, b: List<byte>) =
  24.     normalize(addLists(a,b),0uy) |> List.rev |> List.map(fun(b:byte) -> char(b + byte('0')) ) |> Array.ofList
  25.  
  26. let multiplyVector(scalar: byte, vector: List<byte>) =
  27.     vector |> List.map(fun(b:byte) -> b * scalar)
  28.  
  29. let rec multiplyExec(a: List<byte>, b: List<byte>, s: List<byte>, c: List<byte>) =
  30.     match a, b with
  31.     | _,[] | [],_ -> s
  32.     | heada::taila, _ -> let w = c@(multiplyVector(heada, b))
  33.                          let wn = c@(normalize(w, 0uy))
  34.                          let sp = addLists(wn,s)
  35.                          let sn = normalize(sp, 0uy)
  36.                          multiplyExec(taila,b,sn, 0uy::c)
  37.            
  38.  
  39. let multiply(a: List<byte>, b: List<byte>) =
  40.  
  41.    
  42.  
  43.  
  44. [<EntryPoint>]
  45. let main argv =
  46.     printf "Podaj pierwsza liczbę: "
  47.     let l1 = read(System.Console.ReadLine())
  48.     printf "Podaj druga liczbę: "
  49.     let l2 = read(System.Console.ReadLine())
  50.     let s = add(l1,l2)
  51.     printfn "%A" l2
  52.     printfn "%A" (multiplyVector (2uy, l2))
  53.     printfn "Wynik dodawania: %s" (new System.String (s))
  54.  
  55.     0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement