Convert integer to base 4 in F#

Viewed 213

I want to convert a given integer into a base 4 string. For eg : In scala,

var str: String = Integer.toString(10, 4)
gives the output "22"  ie 2*(4^1) + 2*(4^0) = 10

Im having difficulty doing this in F#. Any help is appreciated

1 Answers
let intToDigits baseN value : int list =
    let rec loop num digits =
        let q = num / baseN
        let r = num % baseN
        if q = 0 then 
            r :: digits 
        else 
            loop q (r :: digits)

    loop value []

254
|> intToDigits 16
|> List.fold (fun acc x -> acc + x.ToString("X")) ""
|> printfn "%s"

254
|> intToDigits 4
|> List.fold (fun acc x -> acc + x.ToString()) ""
|> printfn "%s"

This outputs FE for the base-16 conversion and 3332 for the base-4 conversion. Note that ToString("X") works for up to base 16, so it could be used for the base-4 conversion too.

I adapted this int based solution from Stuart Lang's bigint example (which uses bigint.DivRem rather than integer operators).

Related