Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Learn more about F# at http://fsharp.net
- // See the 'F# Tutorial' project for more help.
- let read(str: System.String) =
- let array = str.ToCharArray() |> List.ofArray |> List.rev |> List.map(fun(c:char) -> (byte c)-(byte '0'))
- array
- let rec addLists(a: List<byte>, b: List<byte>) =
- match a, b with
- | _,[] -> a
- | [],_ -> b
- | heada::taila, headb::tailb -> (byte(heada) + byte(headb))::addLists(taila,tailb)
- let rec normalize(result: List<byte>, p: byte) =
- match result with
- | head::tail -> let w = head+p
- (w%10uy)::normalize(tail, (w/10uy))
- | [] -> if p > 0uy then (p%10uy)::normalize([],(p/10uy))
- else []
- let add(a: List<byte>, b: List<byte>) =
- normalize(addLists(a,b),0uy) |> List.rev |> List.map(fun(b:byte) -> char(b + byte('0')) ) |> Array.ofList
- let multiplyVector(scalar: byte, vector: List<byte>) =
- vector |> List.map(fun(b:byte) -> b * scalar)
- let rec multiplyExec(a: List<byte>, b: List<byte>, s: List<byte>, c: List<byte>) =
- match a, b with
- | _,[] | [],_ -> s
- | heada::taila, _ -> let w = c@(multiplyVector(heada, b))
- let wn = c@(normalize(w, 0uy))
- let sp = addLists(wn,s)
- let sn = normalize(sp, 0uy)
- multiplyExec(taila,b,sn, 0uy::c)
- let multiply(a: List<byte>, b: List<byte>) =
- [<EntryPoint>]
- let main argv =
- printf "Podaj pierwsza liczbę: "
- let l1 = read(System.Console.ReadLine())
- printf "Podaj druga liczbę: "
- let l2 = read(System.Console.ReadLine())
- let s = add(l1,l2)
- printfn "%A" l2
- printfn "%A" (multiplyVector (2uy, l2))
- printfn "Wynik dodawania: %s" (new System.String (s))
- 0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement